运用KMP算法解决的一道题,求一下Next数组,然后直接找最后一个元素的next值,依次找下标为next的元素,直接用总数减去next值就是要求的一个数,直到找到next的值为0的时候结束!#include#include#includeusing namespace std;int a[10000...
分类:
其他好文 时间:
2014-07-28 15:24:03
阅读次数:
300
字符串比配问题,通过引入next[]而使效率提高关于next[]数组,是对模式串的特征来构造的;为了确定在匹配不成功时,下次匹配时j的位置,引入了next[]数组,next[j]的值表示P[0...j-1]中最长后缀的长度等于相同字符序列的前缀。在匹配过程称,若发生不匹配的情况,如果next[j]>...
分类:
其他好文 时间:
2014-07-28 14:36:13
阅读次数:
280
#include #include 考查了对next数组的了解using namespace std;#define max 1000005int next[max],l,ans[max];char s[max];void getNext(){ int j,k; next[0]=-1; j=0;k=...
分类:
其他好文 时间:
2014-07-27 23:26:49
阅读次数:
174
题目来源:http://acm.hdu.edu.cn/showproblem.php?pid=1711 改进的模式匹配算法--KMP算法,时间复杂度有O(n*m)降到O(n+m),求解next数组之后与常规的模式匹配算法相同。 1 #include 2 const int maxn=100...
分类:
其他好文 时间:
2014-07-27 23:11:29
阅读次数:
221
题意:给你一个字符串,求这个字符串首字符到第i个字符为止的子串的最大循环次数k(k>1),若存在,输出i和k.
比如aabaabaabaab,长度为12.
到第2个字符时,a出现2次,到第6个字符时,aab出现了2次,
到第9个字符时,aab出现3次,到第12个字符时,aab出现4次
分析:这个就是求给定字符串的前缀子串(包括整个串)的最大循环次数,根据next数组即可...
分类:
其他好文 时间:
2014-07-26 15:29:12
阅读次数:
236
题意:求给定字符串最大循环次数
思路:根据KMP算法的next数组知,一个长度为n的字符串,
if(n%(n-next[n])==0)
最小循环长度为 L=n-next[n];
最大循环次数为 S=n/L=n/(n-next[n]);...
分类:
其他好文 时间:
2014-07-26 15:28:52
阅读次数:
182
题目大意:输入n,再输入一个长度为n的字符串,从第二位开始,计算它的前缀(包括他自己)中出现过的重复字符串的个数,如aabaabaabaab的第6位的前缀aabaab,aab连续出现了两次,所以输出位数i=6,k=2这个题目要利用next函数求解,不断往前推移,保证往前推移的量能被i整除。即del=...
分类:
其他好文 时间:
2014-07-23 12:55:36
阅读次数:
319
题目大意,求这个字符串到i为止有多少个循环串;int k = i-next[i]; if((i+1)%k == 0 && (i+1)!= k) printf("%d %d\n", i+1, (i+1)/k);这是代码的主要部分,求next数组的部分...
分类:
其他好文 时间:
2014-07-21 09:34:02
阅读次数:
213
poj2406:http://poj.org/problem?id=2406题意:给你一个串,让你找出这个串是由哪个串循环得到,出处循环的次数。题解;知道了KMP,用next数组直接搞定。判断ans=len%(len-next[len])==0?len/(len-next[len]):1; 1 #i...
分类:
其他好文 时间:
2014-07-19 12:21:07
阅读次数:
391
本题是计算一个字符串能完整分成多少一模一样的子字符串。
原来是使用KMP的next数组计算出来的...
分类:
其他好文 时间:
2014-07-13 18:21:28
阅读次数:
250