POJ 2406 Power Strings (KMP) kmp循环节
来源:互联网 发布:直销结算软件 编辑:程序博客网 时间:2024/05/21 07:56
版权声明:本文为博主原创文章,未经博主允许不得转载。
Power Strings
Time Limit: 3000MS Memory Limit: 65536KTotal Submissions: 24403 Accepted: 10264
Description
给你一个字符串a,问a最多由几个完全相同的子串连接而成
Input
每一个测试点都会给你一个长度为m(1<=m<=1000000)的字符串,并以句号结尾。
Output
输出a最多由几个完全相同的子串连接而成。
Sample Input
abcdaaaaababab.
Sample Output
143
Hint
用cin会超时
next[j]的值代表当前的模式串 j位置之前的字符 最大的相同的前缀后缀,
也意味着当前缀后缀不匹配时 模式串j位置要和模式串next[j]位置的字符来匹配,则模式串第1位到next[j]与模式串第j-next[j]位到j位是匹配的。更意味着前缀后缀匹配失败时
模式串要向后移动j-next[j]个位置,这个题就是考察的j-next[j]是不是j的倍数
当存在长度为n的字符串要是由长度为m的循环节组成那么循环节的个数一定是n/m,而现在循环判断到模式串最后一个字符n-1(因为数组下标用的是从0开始)位置时,(循环体内会得到数组next[n]的值),那么n-next[n]就是要移动的长度(也是循环节所包含的字符个数,要是n%(n-next[n])=0就是所含的个数,/////?否则就为1*/
也意味着当前缀后缀不匹配时 模式串j位置要和模式串next[j]位置的字符来匹配,则模式串第1位到next[j]与模式串第j-next[j]位到j位是匹配的。更意味着前缀后缀匹配失败时
模式串要向后移动j-next[j]个位置,这个题就是考察的j-next[j]是不是j的倍数
当存在长度为n的字符串要是由长度为m的循环节组成那么循环节的个数一定是n/m,而现在循环判断到模式串最后一个字符n-1(因为数组下标用的是从0开始)位置时,(循环体内会得到数组next[n]的值),那么n-next[n]就是要移动的长度(也是循环节所包含的字符个数,要是n%(n-next[n])=0就是所含的个数,/////?否则就为1*/
例如:a b a b a b
next:-1 0 0 1 2 3 4
代码懒得打了
#include<iostream>#include <stdio.h>#include<string.h>using namespace std;int next[1000005];char s[1000005];void getnext(){ int i=0,j=-1; next[0]=-1; int len=strlen(s); while(i<len)//不同点 { if(s[i]==s[j]||j==-1) { i++; j++; next[i]=j; } else j=next[j]; }}int main(){ while(scanf("%s",s)>0) { if(s[0]=='.') break; int len=strlen(s); getnext(); if(len%(len-next[len])==0) printf("%d\n",len/(len-next[len])); else//? printf("1\n");//? } return 0;}http://www.cnblogs.com/ziyi--caolu/archive/2013/01/01/2841708.html
阅读全文
0 0
- POJ - 2406 Power Strings (KMP循环节)
- POJ - 2406 Power Strings(KMP 循环节)
- POJ 2406 Power Strings [KMP+循环节]
- POJ 2406 Power Strings(KMP循环节)
- poj 2406 Power Strings【kmp循环节】
- POJ 2406 Power Strings (KMP) kmp循环节
- poj 2406 Power Strings (KMP+最小循环节)
- POJ 2406 Power Strings KMP 求最小循环节
- POJ 2406 Power Strings(KMP:找串循环节)
- POJ 2406 Power Strings (KMP找字符串的循环节)
- POJ 2406 Power Strings(kmp循环节)
- POJ 2406 Power Strings(KMP 找最短循环节)
- POJ 2406 Power Strings(KMP求最小循环节)
- poj 2406 Power Strings(kmp循环节)
- 【POJ 2406】 Power Strings(KMP求循环节)
- POJ 2406 Power Strings [KMP+循环节规律]
- POJ 2406Power Strings kmp算法求循环节
- POJ 2406 Power Strings (kmp求循环节)
- spring依赖对象的自动装配
- angular中$scope.$apply和$scope.$digest的区别
- python绘制随机网络图形
- NO4、python运算符
- 栈的应用 表达式求值
- POJ 2406 Power Strings (KMP) kmp循环节
- 阿里云centos环境之mysql安装<二>
- 记录自学Java的第一篇
- ACM-10月19日周四周中训练心得
- Python3中dict.keys()转换成list类型
- Learn Python the Hard Way(“笨办法”学python) 第四版 例39笔记
- delphi跳出循环体
- GitPush避免重复输入用户名和密码
- 神经网络的层参数维度(14)---《深度学习》