题目分析:
基本思路是遍历寻找连续重复项。最麻烦的点在于如果在过程中出现不相称的现象,要把needle[0]重新寻找相同的点位。我尝试将满足haystack[i]==needle[0]的i进行另外的保存,这样一旦出现中断的情况就能够马上寻找到最近的点,但不知为什么总是不行。经过计算我发现只要将i=i-j+1即可。
代码:
class Solution {
public:
int strStr(string haystack, string needle) {
int l1=haystack.size();
int l2=needle.size();
if(l2==0) return 0;
int i=0,j=0,k=0;
while(i<l1&&j<l2){
if(haystack[i]!=needle[j]){
i=i-j+1;
j=0;
}
if(haystack[i]==needle[j])
{
i++;
j++;
if(j==l2)
return i-l2;
}
}
return -1;
}
};