【codevs1204】寻找子串位置 kmp
2018-02-18 15:48
225 查看
原题//codevs1204 寻找子串位置
#include<iostream>
#include<string>
#include<cstring>
#include<cstdio>
using namespace std;
string a,b;
int n,m;
int fail[101000];
void getfail()
{
fail[0]=0;fail[1]=0;
for (int i=1;i<m;i++)
{
int j=fail[i];
while(j&&b[i]!=b[j]) j=fail[j];
fail[i+1]=b[i]==b[j]?j+1:0;
}
}
int main()
{
cin>>a>>b;
n=a.length();m=b.length();
getfail();
int j=0;
for (int i=0;i<n;i++)
{
while(j&&a[i]!=b[j]) j=fail[j];
if (a[i]==b[j]) j++;
if (j==m) printf("%d\n",i-j+2);
}
return 0;
}
#include<iostream>
#include<string>
#include<cstring>
#include<cstdio>
using namespace std;
string a,b;
int n,m;
int fail[101000];
void getfail()
{
fail[0]=0;fail[1]=0;
for (int i=1;i<m;i++)
{
int j=fail[i];
while(j&&b[i]!=b[j]) j=fail[j];
fail[i+1]=b[i]==b[j]?j+1:0;
}
}
int main()
{
cin>>a>>b;
n=a.length();m=b.length();
getfail();
int j=0;
for (int i=0;i<n;i++)
{
while(j&&a[i]!=b[j]) j=fail[j];
if (a[i]==b[j]) j++;
if (j==m) printf("%d\n",i-j+2);
}
return 0;
}
相关文章推荐
- 【KMP】codevs1204——寻找子串位置
- KMP——CODEVS1204 寻找子串位置
- codevs 1204 寻找子串位置
- codevs 1204 寻找子串位置
- CODE[VS] 天梯 1204 寻找子串位置
- codevs1204 寻找子串位置
- Code Vs-problem-1204 寻找子串位置
- codevs1204 寻找子串位置
- 【CODEVS1204】寻找子串位置
- [codeVS1204] 寻找子串位置
- 【codevs】[1204]寻找子串位置
- CODE[VS]-寻找子串位置-字符串处理-天梯青铜
- 【codevs】1204 寻找子串位置(KMP模板,比模板还模板)
- codevs 1204 寻找子串位置 KMP
- [CodeVS1204]寻找字串位置 做题笔记
- 1204 寻找子串位置
- 【codevs 1204】寻找子串位置
- Codevs_P1425 最长公共子串(KMP)
- WikiOI 1204 寻找子串位置
- Wikioi 天梯 寻找子串位置(1204)