KMP算法的c++实现
2017-05-29 17:37
204 查看
/* 实现KMP主要有下面两个步骤: 1.构建next数组,形如 abcabc的字符串,创建一个数组next,数组的下标表示截这么长的字符串所对应的对称子串的长度。 2.匹配字符串。 */ #include<cstdio> #include<iostream> #include<string> #include<vector> using namespace std; string str,com; int next[1005]; int kmp() { int i=0,j=0; int sum=0; while(i<str.size()) { if(str[i]==com[j]) { i++; j++; } else{ if(j==0) i++; else j=next[j-1]; } if(j==com.size()-1) sum++,j=0; //如果存在找 ababab aba 这种情况 ,j=next[j]; } return sum; } int main() { //freopen("test.txt","r",stdin); cin>>str; cin>>com; next[0]=0; //第一个字符的值一定为0,因为不可能有对称的子串 for(int i=1;i<com.size();i++) { int j=next[i-1]; //j为什么要等于前面next[i-1]?想一想我前面如果对称子串长度为X,我只需要知道下一个com[x+1]是否等于com[i]; while(j>0&&com[j]!=com[i]) { j=next[j]; //这里是节省时间 : 这种情况 ABDADABDABD,当1.ABDAD和2.ABDAB时候 j=next[j],j就从1开始 } if(com[i]==com[j]) j++; next[i]=j; } int sum=kmp(); cout<<sum<<endl; return 0; }
相关文章推荐
- KMP算法的C++实现代码
- 数据结构_串_串的模式匹配_KMP算法_C++实现
- KMP算法 C++实现
- KMP算法匹配原理以及C++实现
- C++实现KMP算法
- KMP算法C++实现
- 逐步理解KMP算法C++完整实现
- kmp算法c++代码实现
- KMP算法C++实现
- KMP算法的一个C++实现
- 数据结构_串_用链表做存储结构实现KMP算法_C++实现
- 算法串匹配C++实现字符串匹配的KMP算法
- C++实现字符串匹配的KMP算法
- KMP算法C++ 实现
- kmp算法C++源码实现
- KMP算法 (C++实现)
- C++实现的KMP算法
- KMP算法 (C++实现)
- KMP算法 C++实现
- KMP算法及c++实现