摘要:
刚开始,以为统计整个字符串的有多少个循环然后输出,结果一直是output limit excesded;原来是让计算前i个字符的循环; 1 #include<iostream> 2 #include<cstring> 3 #include<cstdio> 4 using namespace std; 5 #define N 1000006 6 char str[N]; 7 int next[N]; 8 int n; 9 void get_next()10 {11 12 int i=0,j=-1;13 next[0]=-1;14 while(i<n)15 阅读全文
posted @ 2013-04-30 18:29
heat nan
阅读(222)
评论(0)
推荐(0)
摘要:
题目大意:给出你一个字符串比如abcabca,可以发现这个字符串的循环周期为3,即abc,那么还需要添加多少个字符,使得整个字符串是n倍的循环,并且n大于1;abcabca 循环周期为3,所以还需要添加2个字符;abcabc 循环周期为3,所以还需要添加0个字符;abc 循环周期为3,但是其大循环为1,所以最少还要增加个abc,即需要添加3个字符;KEY:运用KMP算法中的next数组可完美解决此问题,已经知道abcabca一共有7个字符,而且next[1-7]中的数值为分别为0 0 0 1 2 3 4;显然循环周期为T=7-4;也知道abcabcabca中next的值分别对应为0 0 0 1 阅读全文
posted @ 2013-04-30 16:30
heat nan
阅读(357)
评论(0)
推荐(0)
摘要:
本题是加深对kmp中next数组的认识的好题,也可以说是体现next数组的精髓的一题。题目大意:给定一个字符串,比如“alala”,找出所有的字串满足该字串即是他的前缀又是他的后缀,输出他们的长度:其中,“alala”,满足该字符串的有a,ala,alala;即输出1 2 3即可。alala中next数组中存储的对应值分别为0 0 1 2 3;字符串的长度为5,即abala肯定满足即是自己的前缀又是自己的后缀,所以5输出,next[5]中存的值是3,next[3]中存的值是1;即输出1 3 5;刚好符合了next函数的本质。 1 #include<iostream> 2 #incl 阅读全文
posted @ 2013-04-30 12:57
heat nan
阅读(176)
评论(0)
推荐(0)

浙公网安备 33010602011771号