KMP模板
来源:互联网 发布:淘宝客seo 编辑:程序博客网 时间:2024/06/03 16:53
首先计算next数组
void GetNext(char* p,int next[])
{
int pLen = strlen(p);
next[0] = -1;
int k = -1;
int j = 0;
while (j < pLen - 1)
{
//p[k]表示前缀,p[j]表示后缀
if (k == -1 || p[j] == p[k])
{
++k;
++j;
next[j] = k;
}
else
{
k = next[k];
}
}
}
然后就是进行匹配了
int KmpSearch(char* s, char* p)
{
int i = 0;
int j = 0;
int sLen = strlen(s);
int pLen = strlen(p);
while (i < sLen && j < pLen)
{
//①如果j = -1,或者当前字符匹配成功(即S[i] == P[j]),都令i++,j++
if (j == -1 || s[i] == p[j])
{
i++;
j++;
}
else
{
//②如果j != -1,且当前字符匹配失败(即S[i] != P[j]),则令 i 不变,j = next[j]
//next[j]即为j所对应的next值
j = next[j];
}
}
if (j == pLen)
return i - j;
else
return -1;
}
顺带附上hdu2087的代码
剪花布条
Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 19850 Accepted Submission(s): 12406
abcde a3aaaaaa aa#
03
这是一条模板题
代码如下:
#include<cstdio>
#include<cstring>
#include<iostream>
#include<string>
#include<algorithm>
#include<algorithm>
using namespace std;
const int maxn=1005;
int nexta[maxn];
string s;//表示花纹布
string p;//表示小条子
void qiun()
{
int plen=p.length();
nexta[0]=-1;
int k=-1;
int j=0;
while(j<plen-1)
{
if(k==-1||p[j]==p[k])
{
++k;
++j;
nexta[j]=k;
}
else
{
k=nexta[k];
}
}
}
int main()
{
while(1)
{
cin>>s;
if(s[0]=='#')
return 0;
cin>>p;
int countn=0;
int i=0;
int j=0;
int slen=s.length();
int plen=p.length();
qiun();
while(i<slen)
{
//如果j=-1或者当掐字符匹配成功,都让i++,j++
if(j==-1||s[i]==p[j])
{
i++;
j++;
}
else
{
//如果j!=-1且当前字符匹配失败,则令i不变,j=next【j】
j=nexta[j];
}
if(j==plen)
{
countn++;
j=0;
}
}
if(j==plen&&i-j)
countn++;
cout<<countn<<endl;
}
return 0;
}
- KMP模板
- KMP 模板
- kmp模板
- kmp模板
- kmp模板
- KMP模板
- kmp模板
- kmp模板
- KMP 模板
- 【模板】KMP
- KMP模板
- KMP模板
- 【KMP 模板】
- KMP模板
- KMP 模板
- kmp模板
- KMP模板
- KMP 模板
- CoordinatorLayout与NestedScrollView嵌套RecyclerView使用中的坑
- 动态规划——背包问题(二)
- python_adult_pca
- JavaWeb入门学习-搭建环境(Eclipse版)
- ajax 编码函数的运用 json_encode() json_decode()
- KMP模板
- Emgucv图像处理
- centos安装mysql
- 信息安全——消息认证与数字签名
- Android--Drawable标签介绍
- 常见面试题整理--数据库篇(每位开发者必备)
- 随机梯度下降
- windows 配置apache+php+mysql环境
- Android问题:ScrollView默认位置不是最顶部最全解决方案