51nod 1277 KMP 前缀出现次数
51NOD 1277:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1277
跟HDU 6153还挺像的:http://www.cnblogs.com/Egoist-/p/7435573.html
相比与上面那个题,这个还要相对简单一些,只需要处理模式串自己就好了。
一开始写麻烦了,直接套了HDU6153的代码,后来发现……他就是个模式串本身的匹配,我干嘛弄那么麻烦Orz
题意:找前缀长度*出现次数的最大值,长度好说,问题就在于求出现次数了
最容易得到的前缀的长度和出现次数是模式串本身,也就是(len,1)(长度,出现次数);
而在处理next[i]时,长度为i的前缀至少出现一次,那么我们用num[i]记录前缀[0……i]的出现次数,全部填充为1;
与HDU6153一样,在计数前缀i的出现次数时,由于kmp减少回溯次数的特性,省略了相同前缀的计数,
但是由于处理的是前缀,[0,next[i]]出现的前缀,在[0,i]中必然出现,倒序,num[next[i]]+num[i]即可;
(至于为什么是倒序,emmmm,有种DP的感觉呢……为了减少next数组处理部分的改写(好吧其实是我懒),
只有模式串本身,长度为len的前缀的出现次数是已知的,num[i]时是由num[i+1...len]得来的)
#include<iostream> #include<algorithm> using namespace std; const int MAX = 100000; int nextt[MAX + 10]; int num[MAX + 10]; char s[MAX + 10]; int t,len; void getnext() {int p=0, k = -1;nextt[0] = -1;while (p < len){if (k == -1 || s[p] == s[k]){p++;k++;nextt[p] =k;}else k = nextt[k];} } int main() {while (cin >> s){len = strlen(s);fill(num, num+len+1, 1);getnext();int maxx = 0;for (int i = len; i > 0; i--){num[nextt[i]] += num[i];maxx = max(maxx, num[i]*i);}cout << maxx << endl;}return 0; }
转载于:https://www.cnblogs.com/Egoist-/p/7435754.html
51nod 1277 KMP 前缀出现次数相关推荐
- Zoj 3587 Marlon's String (KMP 字符串拼接 前缀出现次数)
题意:给字符串S,T,找到所有的tetrad (a,b,c,d), Sa..b + Sc..d = T , a≤b and c≤d.也就是把T分成两段,这两段都由S中的子串组成的,求有多少中组合方式( ...
- 51nod 1422 沙拉酱前缀
1422 沙拉酱前缀 题目来源: CodeForces 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题 收藏 关注 沙拉酱非常喜欢数字序列.这正是他要弄一个关于 ...
- hdu1671 字典树记录前缀出现次数
题意: 给你一堆电话号,问你这些电话号后面有没有相互冲突的,冲突的条件是当前这个电话号是另一个电话号的前缀,比如有 123456789 123,那么这两个电话号就冲突了,直接输出NO. 思 ...
- POJ2406 KMP前缀周期
题意: 给你一个字符串,长度小于1百万,问你他最多可以拆成集合相同字符串,例如abcabcabc 可以拆成3个abc,所以输出3. 思路: 这个是比较常规的next应用,首先假 ...
- POJ 1961 KMP(当前重复次数)
题意: 前缀重复次数,举个例子,aaa 2的位置2个a,3的位置3个a abcabcabc 6的位置两个abcabc,9的位置三个abcabc.... 思路: KMP基础题目之一 ...
- 前缀函数及kmp算法
1.字符串基础 1.1 字符集 一个字符集是一个建立了全序关系的集合,也就是说中的任意两个不两只的元素和都可以比较大小,要么,要么.字符集中的元素称为字符. 1.2 字符串 一个字符串S是将n个字符顺 ...
- hdu3374最小表示法+KMP
题意: 给你一个最长100W的串,然后让你找到最小同构子串,还有最大同构子串的下标,最小同构子串就是把字符串连接成一个环,然后选择一个地方断开,得到的一个ASCII最小的子串(求最大同理) ...
- 算法入门篇七 前缀树
牛客网 左程云老师的算法入门课 找二叉树的节点的后继节点 原则 如果节点有右子树,那么后继节点就是右子树的最左边的第一个节点 如果节点没有右子树,如果节点是父节点的右孩子,就继续往上找,直到找到一个父 ...
- BMY、KMP、BM、BMHS算法性能比较
前些日子研究了一下字符串匹配算法,突发奇想自己设计了一种新的字符串匹配算法,因为是基于BM的思想,所以暂且叫他BMY算法吧.传统的BM算法是基于坏字符规则和好后缀规则,从后向前的匹配字符串,每次发现失 ...
最新文章
- 思科服务器查看生成树协议,CISCO中生成树协议的配置
- 为什么阿里巴巴禁止在 foreach 循环里进行元素的 remove/add 操作
- 天翼云从业认证【考前半小时的30句话】
- Java 建模:UML 工作簿,第 1 部分
- C和指针之函数之求最大公约数
- sklearn svm如何选择核函数_机器学习之支持向量机多种核模型对比
- 眼控科技 实习算法工程师面试
- swoole 类中使用定时器
- 零碎技术栈01_UML画图分析
- eNSP常用命令 华为模拟器eNSP常用命令
- 51单片机IIC驱动OLED
- 关于msp430系列单片机的一些入门心得(新手向)
- lightgbm中的多分类multiclass与multiclassova
- 自然语言处理常用单词
- Missing Values(缺失值)
- 为什么要使用工作流引擎
- 它来啦,它来啦!三子棋小游戏来啦!!!
- 日语(五十元音)_01
- python循环练习题
- vue项目中,导出下载Excel表格