hihoCoder #1015 KMP算法
来源:互联网 发布:淘宝生意参谋竞争情报 编辑:程序博客网 时间:2024/04/23 16:43
传送门:点击打开链接
KMP算法是一种字符串匹配算法,我理解为对字符串暴搜的优化,难点在next函数的求值,看了两天还是没有完全弄懂next数组的意思
可以写出函数但是对其中的递归实现只是在看明白了的状态。
但是对next数组也有一点优化。
next数组中值:对应字符前的字符串的最大相同前后缀长度
这是在网上看其他dalao的文章的算法总结写的代码,侵删致歉。
AC代码
#include<iostream>#include<cstring>#include<algorithm>#include<cmath>using namespace std;const int MAX = 1e6 + 5;int Next[MAX];char S[MAX], P[MAX];int KMP(char *s1, char *s2){int m1 = strlen(s1), m2 = strlen(s2);Next[0] = 0;int ans, j; ans = 0;j = 1;while(j < m2){int k = Next[j - 1];while(s2[j] != s2[k] && k){//两字符不等,函数值与上一字符函数值相同 k = Next[k - 1];}if(s2[j] == s2[k])//新比较的字符相等,函数值加一 Next[j] = k + 1;elseNext[j] = 0;//新比较字符不等,跳回首字符 j++;}j = 0;for(int i = 0; i < m1; i++){while(s1[i] != s2[j] && j){//出现不匹配的情况,根据next函数值右移指定大小 j = Next[j - 1];}if(s1[i] == s2[j])//相匹配后,右移继续判断 j++;if(j == m2){//出现成功匹配的情况,答案加一 ans++;}}return ans;}int main(){int N;cin>>N;while(N--){cin>>P;cin>>S;cout<<KMP(S, P)<<endl;}return 0;}
阅读全文
0 0
- hihoCoder - 1015 - KMP算法
- [HiHoCoder]#1015 : KMP算法
- hihoCoder#1015 KMP算法
- hihocoder#1015 : KMP算法
- hihoCoder 1015 : KMP算法
- hihoCoder #1015 : KMP算法
- hihoCoder#1015 KMP算法
- hihocoder #1015 KMP算法
- hihoCoder 1015 KMP算法
- hihoCoder 1015 KMP算法
- hihocoder #1015 kmp算法
- hihoCoder 1015 kmp算法
- hihocoder 1015 KMP算法
- hihoCoder 1015 KMP算法
- [HihoCoder]#1015 : KMP算法
- hihoCoder 1015 : KMP算法
- hihoCOder #1015 : KMP算法
- hihocoder 1015 KMP算法
- hibernate5 生成session的方法
- 淘淘商城系列——内容分类管理
- 生产者--消费者模型之互斥锁和条件变量
- 欢迎使用CSDN-markdown编辑器
- js开发:javascript操作数组
- hihoCoder #1015 KMP算法
- DLL 函数导出的规则和方法
- hdoj1049 Climbing Worm(小学数学题)
- 今天真是醉了,来看一下除了穷举之外的求最大公约数算法.
- Problem D: 平面上的点和线——Point类、Line类 (V)
- 优化Mysql数据库的8个方法
- svn中检出项目后无法部署
- Oracle日期数据查询
- JAVA基础觉得很好所以....