字符串模式匹配,可以用暴力的方法,也可以用KMP算法。这里只给出KMP算法做记录。
#include<iostream>
#include<string>
using namespace std;
class Solution {
public:
int strStr(string haystack, string needle) {
int m=haystack.size();
int n=needle.size();
if(m<n) return -1;
int next[m];
build_next(needle,n,next);
for(int i=0;i<n;++i){
cout<<next[i]<<" "<<endl;
}
return KMP(haystack,m,needle,n,next);
}
//»ñµÃnext
void build_next(string needle,int length,int* next){
int i ,j;
next[0]=0;
i=1;j=0;
while(i<length){
while(j>0&&needle[i]!=needle[j])
j=next[j-1];
if(needle[i]==needle[j])
++j;
next[i]=j;
++i;
}
}
int KMP(string haystack,int m,string needle,int n,int *next){
int i=0,j=0;
for( ;i<m&&j<n;++i){
while(j>0&&haystack[i]!=needle[j])
j=next[j-1];
if(haystack[i]==needle[j]){
++j;
}
if(j==n){
return (i-n+1);
}
}
return -1;
}
};
int main(){
Solution s;
cout<<s.strStr("babba","bbb")<<endl;
return 0;
}