Pagini recente » Cod sursa (job #2960665) | Cod sursa (job #2033115) | Cod sursa (job #517721) | Cod sursa (job #2086032) | Cod sursa (job #1524091)
#include <iostream>
#include <vector>
#include <string.h>
using namespace std;
string pat, s;
vector <int> p;
int l, n;
void prefix()
{
int k = -1;
p[0] = k;
int i = 0;
while(i < l)
{
while(k >= 0 && pat[i] != pat[k]) k = p[k];
k++;
i++;
p[i] = k;
}
}
vector <int> matches;
void getMatches()
{
int j = 0;
int i = 0;
while(i < n)
{
while( j >= 0 && s[i] != pat[j])
{
j = p[j];
//cout << j << ' ' <<p[j] << endl;
}
j++;
i++;
//cout << "j = " << j << '\n';
if( j == l)
{
//cout << 'a';
matches.push_back(i-j);
j = p[j];
}
}
}
int main()
{
cin >> pat;
cin >> s;
l = pat.length();
n = s.length();
p.resize(l+1, 0);
prefix();
getMatches();
for(auto i : matches)
{
cout << i << ' ';
}
}