题目描述
给出两个字符串 s1 和 s2 ,字符串满足长度小于100,000。现要求出s1中出现s2子串的所有位置。(位置编号从1到N)
输入
第一行输入N,M,N表示s1的长度,M表示s2的长度。
第二行输入字符串s1.
第三行输入字符串s2.
输出
每一行表示子串s2在s1中出现的位置
样例输入 复制
14 7
abababaababacb
ababacb
样例输出 复制
8
参考代码:
#include<bits/stdc++.h>
using namespace std;
int n,m;
char a[100001],b[100001];
int main()
{
cin>>n>>m>>a>>b;
for(int i=0;i<n;i++)
{
if(a[i]==b[0]&&a[i+1]==b[1])
{
for(int j=0,g=i;j<m;j++,g++)
{
if(a[g]!=b[j])
break;
if(j==m-1)
cout<<i+1<<endl;
}
}
}
}