字符串匹配问题
最坏情况下时间复杂度仍为o(n).
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 using namespace std; 5 const int maxn=1000005; 6 int next[maxn]; 7 char a[maxn], b[maxn]; 8 int j; 9 int main(){ 10 scanf("%s",a+1); 11 scanf("%s",b+1); 12 int lena=strlen(a+1); 13 int lenb=strlen(b+1); 14 for(int i=2; i<=lenb; i++){ 15 while(j && b[i]!=b[j+1]) j=next[j]; 16 if(b[j+1]==b[i]) j++; 17 next[i]=j; 18 } 19 j=0; 20 for(int i=1; i<=lena; i++){ 21 while(j && b[j+1]!=a[i]) j=next[j]; 22 if(b[j+1]==a[i]) j++; 23 if(j==lenb) printf("%d ", i-lenb+1); 24 } 25 for(int i=1; i<=lenb; i++){ 26 printf("%d ",next[i]); 27 } 28 return 0; 29 }