Pagini recente » Cod sursa (job #564471) | Cod sursa (job #742219) | Cod sursa (job #2371929) | Cod sursa (job #3181401) | Cod sursa (job #2462794)
#include<bits/stdc++.h>
using namespace std;
char txt[2000010], pat[2000010];
vector<int> v;
int lps[2000010];
int main()
{
ifstream cin("strmatch.in");
ofstream cout("strmatch.out");
cin>>pat;
cin>>txt;
int n = strlen(txt);
int m = strlen(pat);
int len = 0;
lps[0] = 0;
int i =1;
while (i<m)
{
if(pat[i] == pat[len])
{
++len;
lps[i] = len;
i++;
}
else
{
if(!len)
{
lps[i] = 0;
i++;
}
else len = lps[len-1];
}
}
int j =0;
while(i<n)
{
if(txt[i] == pat[j])
{
i++;
j++;
if(j == m) v.push_back(i-j);
}
else
if(i<n)
{
if(j)
{
j=lps[j-1];
}
else i++;
}
}
cout<<v.size()<<'\n';
int fin = v.size();
fin = min(fin, 1000);
for(i =0;i<fin;i++)
cout<<v[i]<<' ';
return 0;
}