poj2406 Power Strings
2015-09-24 17:08
323 查看
题意:给一个字符串,找到循环节的数目。
思路:由kmp算法,next[len]知道前缀的第一个到第next[len]与后缀第len-next[len]到最后一个是相同的,如果这个字符串是循环节构成,那么len-next[len]一定是最短的循环节的长度。于是判断这个字符串是否有循环节的条件就是len%(len-next[len])==0,求出循环节的长度,总长度比上循环节长度就是个数。
思路:由kmp算法,next[len]知道前缀的第一个到第next[len]与后缀第len-next[len]到最后一个是相同的,如果这个字符串是循环节构成,那么len-next[len]一定是最短的循环节的长度。于是判断这个字符串是否有循环节的条件就是len%(len-next[len])==0,求出循环节的长度,总长度比上循环节长度就是个数。
[code]#include<cstdio> #include<cstring> #include<cstdlib> #include<climits> #include<stack> #include<queue> #include<iostream> #include<algorithm> using namespace std; int next[1000010],len; char s[1000010]; void get_next(char *s,int *next) { memset(next,0,sizeof(next)); next[0]=-1; int i=0,j=-1; while(i<len) { if(j==-1||s[i]==s[j]) { i++,j++; next[i]=j; } else j=next[j]; } } int main() { while(scanf("%s",s)&&s[0]!='.') { len=strlen(s); get_next(s,next); if(len%(len-next[len])==0) printf("%d\n",len/(len-next[len])); else printf("1\n"); } }
相关文章推荐
- Cocoapod错误 - Xcode6.4
- 黑马程序员——String、StringBuffer、StringBuilder和基本数据类型包装类
- Solr+Zookeeper+HDFS+Tomcat 配置一些理解
- Android基础入门教程——2.4.11 AutoCompleteTextView(自动完成文本框)的基本使用
- 字符串与整型数组的相互转换
- 一个Activity的显示
- 关于checkbox/radio选中不选中HTML不变化
- 開博說明
- Android软件开发之 自定义别样Toast
- NSPredicate
- 第4周项目3 - 单链表应用(1)
- 读IOS进阶笔记。
- zabbix mysql数据库迁移方案
- SpringMVC与Struts2的对比
- ksh 复合变量
- centos crontab(定时任务) 使用
- H.264 Profile、Level、Encoder三张简图 (fps = AVCodecContext->time_base.den / AVCodecContext->time_base.num)
- SAP 插入自定义注释或者代码模板
- 免费课程《微信公众号开发》开讲啦!!!
- linux下怎么查看ssh的用户登录日志