#include <stdio.h>
#include <string.h>
#define MAX_N 100
int pi[MAX_N];
inline int mystrlen(const char* str){int n=0;for(n=0;str[n]!='\0';n++);return n;}
void calculateGetSuf(const char* str){
int n = mystrlen(str);
int begin = 1, match =0;
while(begin + match < n){
if(str[begin + match] == str[match]){
match++;
pi[begin + match - 1] = match;
}else if(match==0){ begin++;}
else{
begin += match - pi[match - 1];
match = pi[match -1 ];
}
}
}
int kmpSearchModified2MaxOverlap(const char* H,const char* N){
calculateGetSuf(N);
int lh = mystrlen(H), ln = mystrlen(N),begin = 0, match =0;
while(begin < lh/*-ln*/){
if(match < ln && H[begin + match] == N[match]){
match++;
if(match + begin == lh){
printf("%d
",begin);
}
}else if(match==0){begin ++;}
else{
begin += match - pi[match -1 ];
match = pi[match -1];
}
}
return 0;
}
int main(){
char str[MAX_N+1];
char reverseStr[MAX_N+1];
strcpy(str,"anon");
int n= mystrlen(str);
for(int i=0;i<n;i++){
reverseStr[i] = str[n-i-1];
}
reverseStr[n]='\0';
kmpSearchModified2MaxOverlap(str,reverseStr);
return 0;
}