Tuesday, December 16, 2014

【leetcode】 Longest Substring with At Most Two Distinct Characters

Question:
Given a string S, find the length of the longest substring T that contains at most two
distinct characters.
For example,
Given S = “eceba”,
T is "ece" which its length is 3.

代码: 这里

我用的是O(n^3)的方法,不知道怎么更好的剪支,其实在调试的时候发现,一旦发现第二个循环出现了超过2个字符的情况就可以直接调到外层循环了,就是不知道怎么写代码。

另一种方法是,维护一个sliding window保证这个窗口中的字符串最多只有两种,维护start和end的指针,记录每个字符出现的次数,当第三个字符出现时,加入到map中,并且把map中记录的start位置上的字符串删掉,如果start位置上的字符串有多个,就循环将计数器减一,直到为零,然后删除start位置的字符串

代码如下:这里

Sunday, December 14, 2014

【leetcode】 mplement strstr()

Implement strstr(). Returns the index of the first occurrence of needle in haystack, or –1
if needle is not part of haystack.

代码: 这里

代码是clean code handbook 里提出的思路,是O(mn)时间复杂度,Leetcode升过一些级,之前这个复杂度是过不了大数据的,但是现在可以过了。
除了KMP 之外是不是还有更高效的方法。

Friday, December 12, 2014

【LeetCode】Maximum Product Subarray

有两个做法一个是暴力双循环
代码:这里

一个是动态规划,维护两个值,一个是的当前最大值,另一个是当前最小值
similar like Maximum Subarray question
difference is the max value could be get from 3 situations
current maxValue * A[i]  if A[i]>0
current minValue * A[i]  if A[i]<0
A[i]  
We need to record current maxValue, current minValue and update them every time get the new product

代码:这里

【leetcode】 Wildcard Matching 和 Regular Expression Matching

Wildcard Matching
题目连接: 点这里
代码:点这里

Regular Expression Matching
题目连接: 点这里
代码: 点这里

这两道题很像,Wildcard Matching我用的是DP,Regular Expression Matching用的是DFS和递归。

问题:
有没有一种方法解决这两道题。