您的位置:首页 > 其它

poj 2406 KMP应用

2012-01-18 01:59 399 查看
题意:根据题目给出的规则,一个字符串表示成a*n,求最大的n.
思路:KMP的next[]的应用,不是很懂,看了许多别人的代码。其中if(len%(len-next[len])==0)这一句是精华所在,对其理解还不是很到位。索性记住算了。。。
例如:next[6]=3; 对于s1s2s3s4s5s6s7s8s9 如果条件成立的话,意味着s1s2s3=s4s5s6=s7s8s9。转载了一篇写的不错的文章,可以参考下。
#include<iostream>
using namespace std;
int next[1000010];
char s[1000010];
void get_next()
{
int j=0,k=-1;
next[0]=-1;
int len=strlen(s);
while(j<len)
{
if(k==-1||s[k]==s[j])
{
next[j+1]=k+1;
j++;k++;
}
else
k=next[k];
}
}
int main()
{
while(scanf("%s",s)!=EOF&&s[0]!='.')
{
get_next();
int len=strlen(s);
if(len%(len-next[len])==0)
printf("%d\n",len/(len-next[len]));
else
printf("1\n");
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: