KMP算法的c++实现
来源:互联网 发布:美工的进阶之路 编辑:程序博客网 时间:2024/06/06 19:27
/* 实现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;}
阅读全文
0 0
- KMP算法C实现
- KMP算法c实现
- KMP算法 C实现
- [C++]KMP算法实现
- KMP算法的C语言代码实现
- kmp算法的c代码实现
- KMP算法的C语言实现
- KMP算法C语言的实现
- KMP算法的C语言实现
- KMP算法的C语言实现
- C语言KMP算法的实现
- KMP算法的C语言代码实现
- 数据结构:BF算法,KMP算法之C、C++的实现
- KMP算法c语言实现
- KMP算法C#/c++实现
- KMP算法C代码实现
- KMP算法--c语言实现
- KMP算法(c++)实现
- All-In-One到SOA的分布式架构演进
- Android 中的DisplayMetrics类的用法
- 如何在linux嵌入式开发板上开机自动运行用户应用程序
- hdu1760博弈
- HttpListener下读取request body
- KMP算法的c++实现
- Android studio 下百度定位API 505 错误 签名问题
- 高级工程师面试题
- find 命令
- JVM学习02:运行时数据区域-程序计数器
- xml写Animation动画
- 3dsmax 对box不同面贴图
- XML
- 备忘录模式