Pagini recente » Cod sursa (job #203038) | Cod sursa (job #1359910) | Cod sursa (job #20880) | Cod sursa (job #910633) | Cod sursa (job #1804106)
#include <bits/stdc++.h>
using namespace std;
vector <int> arp;
void kmp_search(const char *text,const char *pattern,int lenn)
{
int *T;
int i, j;
const char *result = NULL;
if (pattern[0] == '\0')
return ;
/* Construct the lookup table */
T = (int*) malloc((strlen(pattern)+1) * sizeof(int) );
T[0] = -1;
for (i=0; pattern[i] != '\0'; i++) {
T[i+1] = T[i] + 1;
while (T[i+1] > 0 && pattern[i] != pattern[T[i+1]-1])
T[i+1] = T[T[i+1]-1] + 1;
}
/* Perform the search */
for (i=j=0; text[i] != '\0'; ) {
if (j < 0 || text[i] == pattern[j]) {
++i, ++j;
if (pattern[j] == '\0') {
result = text+i-j;
arp.push_back(i - lenn);
// break;
}
}
else j = T[j];
}
// free(T);
// return i;
}
int ft_len(char *p)
{
int i=0;
while (p[i]!='\0')
i++;
return i;
}
int main()
{
freopen("strmatch.in","r",stdin);
freopen("strmatch.out","w",stdout);
long long a,b;
const char *p1,*p2;
string pp,ppp;
cin >> pp >> ppp;
p1 = pp.c_str();
p2 = ppp.c_str();
kmp_search(p2,p1,strlen(p1));
cout << arp.size()<<"\n";
for (auto i:arp)
{
cout << i<< " ";
}
return 0;
}