题解:对于串pattern来说,如果0~i-1这个位置中循环,那么i%(i-next[i])==0 ,循环次数为 i/(i-next[i]),循环长度为 i-next[i]

例如对于串ababab来说

index  0 1 2 3 4 5

char    a b a b a b

next   -1 0 0 1 2 1

对于index=4时,i%(i-next[i])==0,而0~3位置的字符存循环。

代码:

#include<cstdio>
#include<iostream>
#include<cstring>
int N,next[];
char pattern[];//用于存放模式串 void getNext()//求next数组的模板
{
next[]=-;
int k=-,j=;
while(j<N){
if(k==-||pattern[k]==pattern[j]){
++j;++k;
next[j]=k;
}
else
k=next[k];
}
}

void solve()
{
  //如果i%(i-next[i])==0 那么就有循环,循环次数为 i/(i-next[i]),循环长度为 i-next[i]
int i,n;
for(i=;pattern[i-];++i){
n=i-next[i];//这里我借鉴了一位大牛的博客,感谢大牛的博客
if(i%n== && i/n>){
printf("%d %d\n",i,i/n);
}
}
return;//记得得回溯
}
int main()
{
int cnt=;
while(~scanf("%d",&N),N){
getchar();
memset(next,,sizeof(next));
gets(pattern);
getNext();
printf("Test case #%d\n",++cnt);
solve();
printf("\n");
}
return ;
}
//关于solve()函数的详细解析请参考大牛的博客,http://www.cnblogs.com/jackge/archive/2013/01/05/2846006.html

最新文章

  1. 利用JS实现自定义滚动条
  2. mybatis自动生成代码
  3. Difference between Char.IsDigit() and Char.IsNumber() in C#
  4. 微信内置浏览器中,点击下拉框出现页面乱跳转现象(iphone)
  5. 使用ambari搭建Hadoop平台
  6. 通过Mouse Without Borders在多台机器上共享键盘鼠标
  7. Java对象的强、软、弱和虚引用详解
  8. Flask 应用最佳实践
  9. PDF文件优缺点
  10. Erdos
  11. 通过fiddler和逍遥模拟器模拟抓包android手机
  12. Java线程的5种状态及切换(透彻讲解)-京东面试
  13. 在vscode中,自定义代码片段,例vue组件的模板
  14. 图片按钮(imageButton)
  15. android.view.animation(1) - alpha、scale、translate、rotate、set的xml属性和用法(转)
  16. mvc框架详解
  17. jQuery样式与动画
  18. unity面试题二
  19. css3 兼容性
  20. LA 4670 AC自动机

热门文章

  1. POJ3304 Segments 【线段直线相交】
  2. NodeJs进击,新建一个Node Server
  3. centos6 python 安装 sqlite 解决 No module named ‘_sqlite3′
  4. Spring源码学习资料
  5. Attempting to badge the application icon but haven&#39;t received permission from the user to badge the application错误解决办法
  6. 【vim】查找重复的连续的单词
  7. Windows Server2008各版本区别
  8. 高级 Java 面试通关知识点整理!
  9. 006_netstat中state详解
  10. 关于nginx报错/usr/share/nginx/html/jiankongshare&quot; failed (2: No such file or directory)的问题解决