【luogu3375】【模版】kmp字符串匹配
2018-02-18 15:50
387 查看
原题
板子//luogu3375 kmp字符串匹配
#include<iostream>
#include<string>
#include<cstdio>
using namespace std;
string t,p;
int fail[1001000];
int n,m;
void getfail()
{
fail[0]=0;fail[1]=0;
for (int i=1;i<m;i++)
{
int j=fail[i];
while(j&&p[i]!=p[j]) j=fail[j];
fail[i+1]=p[i]==p[j]?j+1:0;
}
}
int main()
{
cin>>t>>p;
n=t.length();m=p.length();
getfail();
int j=0;
for (int i=0;i<n;i++)
{
while(j&&t[i]!=p[j]) j=fail[j];
if (t[i]==p[j]) j++;
if (j==m) printf("%d\n",i-j+2);
}
for (int i=1;i<=m;i++)
if (i!=m) printf("%d ",fail[i]);
else printf("%d\n",fail[i]);
return 0;
}
板子//luogu3375 kmp字符串匹配
#include<iostream>
#include<string>
#include<cstdio>
using namespace std;
string t,p;
int fail[1001000];
int n,m;
void getfail()
{
fail[0]=0;fail[1]=0;
for (int i=1;i<m;i++)
{
int j=fail[i];
while(j&&p[i]!=p[j]) j=fail[j];
fail[i+1]=p[i]==p[j]?j+1:0;
}
}
int main()
{
cin>>t>>p;
n=t.length();m=p.length();
getfail();
int j=0;
for (int i=0;i<n;i++)
{
while(j&&t[i]!=p[j]) j=fail[j];
if (t[i]==p[j]) j++;
if (j==m) printf("%d\n",i-j+2);
}
for (int i=1;i<=m;i++)
if (i!=m) printf("%d ",fail[i]);
else printf("%d\n",fail[i]);
return 0;
}
相关文章推荐
- Luogu 3375 【模板】KMP字符串匹配(KMP算法)
- {模版}KMP字符串匹配
- [洛谷3375]【模板】KMP字符串匹配
- {模版}KMP字符串匹配
- 洛谷 3375_[模板]KMP字符串匹配_KMP
- AC日记——【模板】KMP字符串匹配 洛谷 3375
- 【洛谷】3375 KMP字符串匹配
- 3375 KMP字符串匹配
- KMP字符串匹配 洛古3375 kmp水题
- luoguP3375 【模板】KMP字符串匹配
- 字符串匹配算法之KMP
- 算法导论 KMP字符串匹配
- 字符串匹配 KMP 算法
- ICPC2017网络赛(青岛)1003 HDU 6208 字符串匹配KMP
- KMP字符串匹配
- KMP字符串匹配
- 字符串匹配的 KMP 算法
- 字符串匹配-KMP
- KMP字符串匹配
- python3 kmp 字符串匹配的方法