KMP算法
1 //KMP算法 2 struct Str { 3 char ch[MAXN]; 4 int length; 5 }; 6 void getnext(Str substr,int next[]) { 7 int i=1,j=0; 8 while(i<substr.length { 9 if(j==0||substr.ch[i]==substr.ch[j]) { //当前字符和前面字符相同,则可以比较下一位 10 ++i; 11 ++j; 12 next[i]=j; 13 } else{ 14 j=next[j]; 15 } 16 } 17 } 18 int KMP(Str str,Str substr,int next) { 19 int i=1,j=1; 20 while(i<=str.length&&j<=substr.length) { 21 if(j==0||str.ch[i]==substr.ch[j]) { //如果字符相同,比较下一位。 22 ++i; 23 ++j; 24 } else { 25 j=next[j]; 26 } 27 } 28 if(j>substr.length()) { //整个字串遍历到结尾字符都匹配 29 return i-substr.length; 30 } else return 0; 31 }
越努力越幸运