您的位置:首页 > 其它

poj2406 KMP

2015-08-08 21:53 399 查看
kmp简单题 找循环节。由于KMP的next[]数组,所以可以考虑最后一组的情况,及next
的值;n-next
的值表示一个循环节。

如果n%(n-next
)!=0表明该循环不成立。不然就是直接得到。

#include<stdio.h>
#include<string.h>
#define maxn 1000010
int next[maxn];
char s[maxn];
void getnext()
{
int j,k,len=strlen(s);
j=0;
k=-1;
next[0]=-1;
while(j<len)
{
if(k==-1||s[j]==s[k])
{
j++;
k++;
next[j]=k;
}
else
{
k=next[k];
}
}
}
void getans()
{
int ans,flen;
int n=strlen(s);
flen=n-next
;
if(n%flen==0)
printf("%d\n",n/flen);
else printf("1\n");
}
int main()
{
while(scanf("%s",s)!=EOF)
{
if(s[0]=='.')break;
getnext();
getans();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: