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 前缀出现次数相关推荐

  1. 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中的子串组成的,求有多少中组合方式( ...

  2. 51nod 1422 沙拉酱前缀

    1422 沙拉酱前缀 题目来源: CodeForces 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题  收藏  关注 沙拉酱非常喜欢数字序列.这正是他要弄一个关于 ...

  3. hdu1671 字典树记录前缀出现次数

    题意:       给你一堆电话号,问你这些电话号后面有没有相互冲突的,冲突的条件是当前这个电话号是另一个电话号的前缀,比如有 123456789 123,那么这两个电话号就冲突了,直接输出NO. 思 ...

  4. POJ2406 KMP前缀周期

    题意:       给你一个字符串,长度小于1百万,问你他最多可以拆成集合相同字符串,例如abcabcabc 可以拆成3个abc,所以输出3. 思路:       这个是比较常规的next应用,首先假 ...

  5. POJ 1961 KMP(当前重复次数)

    题意:       前缀重复次数,举个例子,aaa 2的位置2个a,3的位置3个a abcabcabc 6的位置两个abcabc,9的位置三个abcabc.... 思路:      KMP基础题目之一 ...

  6. 前缀函数及kmp算法

    1.字符串基础 1.1 字符集 一个字符集是一个建立了全序关系的集合,也就是说中的任意两个不两只的元素和都可以比较大小,要么,要么.字符集中的元素称为字符. 1.2 字符串 一个字符串S是将n个字符顺 ...

  7. hdu3374最小表示法+KMP

    题意:       给你一个最长100W的串,然后让你找到最小同构子串,还有最大同构子串的下标,最小同构子串就是把字符串连接成一个环,然后选择一个地方断开,得到的一个ASCII最小的子串(求最大同理) ...

  8. 算法入门篇七 前缀树

    牛客网 左程云老师的算法入门课 找二叉树的节点的后继节点 原则 如果节点有右子树,那么后继节点就是右子树的最左边的第一个节点 如果节点没有右子树,如果节点是父节点的右孩子,就继续往上找,直到找到一个父 ...

  9. BMY、KMP、BM、BMHS算法性能比较

    前些日子研究了一下字符串匹配算法,突发奇想自己设计了一种新的字符串匹配算法,因为是基于BM的思想,所以暂且叫他BMY算法吧.传统的BM算法是基于坏字符规则和好后缀规则,从后向前的匹配字符串,每次发现失 ...

最新文章

  1. 思科服务器查看生成树协议,CISCO中生成树协议的配置
  2. 为什么阿里巴巴禁止在 foreach 循环里进行元素的 remove/add 操作
  3. 天翼云从业认证【考前半小时的30句话】
  4. Java 建模:UML 工作簿,第 1 部分
  5. C和指针之函数之求最大公约数
  6. sklearn svm如何选择核函数_机器学习之支持向量机多种核模型对比
  7. 眼控科技 实习算法工程师面试
  8. swoole 类中使用定时器
  9. 零碎技术栈01_UML画图分析
  10. eNSP常用命令 华为模拟器eNSP常用命令
  11. 51单片机IIC驱动OLED
  12. 关于msp430系列单片机的一些入门心得(新手向)
  13. lightgbm中的多分类multiclass与multiclassova
  14. 自然语言处理常用单词
  15. Missing Values(缺失值)
  16. 为什么要使用工作流引擎
  17. 它来啦,它来啦!三子棋小游戏来啦!!!
  18. 日语(五十元音)_01
  19. python循环练习题
  20. vue项目中,导出下载Excel表格

热门文章

  1. 2014025630《嵌入式程序设计》第七周学习总结
  2. 循环队列解决约瑟夫问题
  3. jsp的flash小例子
  4. 用正则表达式获取指定的字符串续_取出所有符合要求的字符串
  5. 查询某一个表的字段和数据类型
  6. python3 for循环怎么用_Python3入门系列之-----循环语句(for/while)
  7. 一文回顾阿里云弹性计算云栖大会精彩看点
  8. 阿里云视频云 Retina 多媒体 AI 体验馆开张啦!
  9. 独家下载!2021前端热门技术解读
  10. 作为数据库核心成员,如何让淘宝不卡顿?