地址:https://leetcode-cn.com/problems/implement-strstr/
思路:KMP算法
Code:
class Solution {
public:
void GetNext(string str,int Next[]){
Next[0]=-1;
int k=0;
for(int i=1;i<str.length();)
{
if(k==-1){
Next[i]=k; k=i++;
}else{
if(str[Next[k]+1]==str[i]){
Next[i]=Next[k]+1; k=i++;
}else{
k=Next[k];
}
}
}
}
int KMP(string s,string p,int Next[]){
int res=-1,i=0,k=0;
while(i<s.length()&&k<p.length()){
if(s[i]==p[k]){
++k; ++i;
}else{
if(!k){
++i;
}else{
k=Next[k-1]+1;
}
}
}
if(k==p.length()){
res=i-p.length();
}
return res;
}
int strStr(string haystack, string needle) {
int Next[needle.length()+5];
if(!needle.length()) return 0;
GetNext(needle,Next);
return KMP(haystack,needle,Next);
}
};