Pagini recente » Cod sursa (job #2399873) | Cod sursa (job #1422877) | Cod sursa (job #2957460) | Cod sursa (job #3128908) | Cod sursa (job #2909451)
#include <iostream>
#include <string>
#include <vector>
#include <fstream>
using namespace std;
int main()
{
ifstream fin; fin.open("strmatch.in");
ofstream fout; fout.open("strmatch.out");
string A, B;
fin >> A >> B;
int count, i, j;
vector <int> vec(A.length(), 0);
vector <int> rs;
for (i=0, j=1; j<A.length(); j++)
{
if (A[i]!=A[j]) vec[j]=0;
else{
vec[j]=i+1;
i++;
}
}
for (i=0, j=0;i<B.length();)
{
if (B[i]==A[j])
{
i++;
j++;
if (j==A.length()) j=vec[j-1], count++, rs.push_back(i-A.length());
}
else{
if (j>0) j=vec[j-1];
if (j==0) i++;
}
}
fout << count << "\n";
for (auto c:rs) fout << c << " ";
fin.close();
fout.close();
}