Theme Section
HDU - 4763To get well prepared for the festival, the hosts want to know the maximum possible length of the theme section of each song. Can you help us?
5 xy abc aaa aaaaba aaxoaaaaa
0 0 1 1 2
code:
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
const int MAXN = 1e6+100;
char s[MAXN];
int Next[MAXN];
void getNext(){
int i = -1,j = 0;
int len = strlen(s);
Next[0] = -1;
while(j < len){
if(i == -1 || s[i] == s[j]){
i++,j++;
Next[j] = i;
}
else
i = Next[i];
}
}
bool kmp(int st){
int i = 0,j = st;
int n = strlen(s);
while(j < n-st){
if(i == -1 || s[i] == s[j])
i++,j++;
else
i = Next[i];
if(i == st)
return true;
}
return false;
}
int main(){
int t;
scanf("%d",&t);
while(t--){
int i,j,len,Max = 0;
scanf("%s",s);
len = strlen(s);
if(len < 3){
printf("0\n");
continue;
}
getNext();
while(Next[len] != -1){
if(Next[len] > Max && kmp(Next[len])){
Max = Next[len];
break;
}
len = Next[len];
}
printf("%d\n",Max);
}
return 0;
}
755



被折叠的 条评论
为什么被折叠?



