[LeetCode]Implement strStr()

Implement strStr().

Returns a pointer to the first occurrence of needle in haystack, or null if needle is not part of haystack.

思考:复习KMP算法。

class Solution {
public:
    char *strStr(char *haystack, char *needle) {
        // IMPORTANT: Please reset any member data you declared, as
        // the same Solution instance will be reused for each test case.
		int len1=strlen(haystack);
		int len2=strlen(needle);
		if(len1<len2) return NULL;
		if(len2==0) return haystack;
		vector<int> fail;
		fail.resize(len2+1,0);
		int i,j,k;
		j=0;k=-1;fail[0]=-1;
		while(j<len2)
		{
			if((k==-1)||(needle[j]==needle[k]))
			{
				j++;
				k++;
				if(needle[j]==needle[k])
					fail[j]=fail[k];
				else
					fail[j]=k;
			}
			else
				k=fail[k];
		}
		i=0;
		j=0;
		while(i<len1&&j<len2)
		{
			if(j==-1||haystack[i]==needle[j])
			{
				i++;
				j++;
			}
			else j=fail[j];
		}
		if(j==len2) return haystack+i-len2;
		else return NULL;
    }
};

      貌似VS2010上return NULL会报错:0x101cd540指令引用的0x00000000内存。该内存不能为read。 

posted @ 2013-11-14 13:41  七年之后  阅读(171)  评论(0编辑  收藏  举报