标签:
Description
Input
Output
Sample Input
3 aaa 12 aabaabaabaab 0
Sample Output
Test case #1 2 2 3 3 Test case #2 2 2 6 2 9 3 12 4
上次做也没有深刻理解next数组的意义 做了这道题 让我理解到 (仅仅是我的理解,错了别喷我。。)next数组的作用就是在匹配主串的时候
遇到了不相同的字符 通过next数组快速跳过已经匹配过的字符。具体解释请看这位大牛写的
做了这道题也知道了next数组可以找循环节 唉 真的想不到
#include <stdio.h>
int next[1000000+10];
char str[1000000+10];
int n;
void set_next()
{
int i=-1;
int j=0;
next[0]=-1;
while(j<n)
{
if(i==-1||str[i]==str[j])
{
i++;j++;
next[j]=i;
}
else
i=next[i];
}
}
int main()
{
int t=0;
while(~scanf("%d",&n)&&n)
{
scanf("%s",str);
set_next();
printf("Test case #%d\n",++t);
for(int i=1;i<=n;i++)
{
// printf("%d\n",next[i]);
int length=i-next[i];
if(i!=length&&i%length==0)
printf("%d %d\n",i,i/length);
}
printf("\n");
}
}标签:
原文地址:http://blog.csdn.net/su20145104009/article/details/51396856