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 }
KMP算法
最新推荐文章于 2024-08-26 21:46:59 发布