博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
51Nod 1277 字符串中的最大值(KMP,裸题)
阅读量:7028 次
发布时间:2019-06-28

本文共 1348 字,大约阅读时间需要 4 分钟。

题目来源:
基准时间限制:1 秒
空间限制:131072 KB 分值: 80
一个字符串的前缀是指包含该字符第一个字母的连续子串,例如:abcd的所有前缀为a, ab, abc, abcd。
给出一个字符串S,求其所有前缀中,字符长度与出现次数的乘积的最大值。
例如:S = "abababa" 所有的前缀如下:
 
"a", 长度与出现次数的乘积 1 * 4 = 4,
"ab",长度与出现次数的乘积 2 * 3 = 6,
"aba", 长度与出现次数的乘积 3 * 3 = 9,
"abab", 长度与出现次数的乘积 4 * 2 = 8,
"ababa", 长度与出现次数的乘积 5 * 2 = 10,
"ababab", 长度与出现次数的乘积 6 * 1 = 6,
"abababa", 长度与出现次数的乘积 7 * 1 = 7.
 
其中"ababa"出现了2次,二者的乘积为10,是所有前缀中最大的。
Input
输入字符串S, (1 <= L <= 100000, L为字符串的长度),S中的所有字符均为小写英文字母。
Output
输出所有前缀中字符长度与出现次数的乘积的最大值。
Input示例
abababa
Output示例
10
题目链接:
分析:kmp裸题,之后会补上纯板子
下面给出AC代码:
1 #include 
2 using namespace std; 3 typedef long long ll; 4 const int maxn=100010; 5 char x[maxn]; 6 int kmpnext[maxn]; 7 int len; 8 int res[maxn];///出现次数 9 void pre_kmp(char x[],int m,int kmpnext[])10 {11 int i,j;12 j=kmpnext[0]=-1;13 i=0;14 while(i<=m)15 {16 if(j==-1||x[i]==x[j])17 {18 kmpnext[++i]=++j;19 }20 else21 {22 j=kmpnext[j];23 }24 }25 return;26 }27 int main()28 {29 cin>>x;30 len=(int)strlen(x);31 pre_kmp(x,len,kmpnext);32 for(int i=len;i>=1;i--)33 {34 res[i]++;35 res[kmpnext[i]]+=res[i];36 }37 ll ans=0;38 for(ll i=1;i<=len;i++)39 {40 ans=max(ans,res[i]*i);41 }42 cout<
<

 

转载地址:http://dwmxl.baihongyu.com/

你可能感兴趣的文章
改写的日历小程序(Java)
查看>>
Java多线程初学者指南(7):向线程传递数据的三种方法
查看>>
将一列的转换成一行
查看>>
Virtual Machine Manager 2008 2008 R2系列之安装部署
查看>>
软件工厂(Software factory)介绍
查看>>
zabbix常用key和自定义key的讲解
查看>>
让你彻底理解STP的各种角色选举
查看>>
ADO.NET 对象模型
查看>>
linux常用命令使用技巧
查看>>
企业架构 - 开篇:TOGAF介绍
查看>>
Windows数据类型探幽——千回百转你是谁?(4)
查看>>
WCF服务编程设计规范(1):最新版WCF Coding Standard 介绍和下载
查看>>
Apache Segmentaion Fault故障处理案例分析
查看>>
C# 温故知新 基础篇(5) 类<思维导图>
查看>>
ZeroMQ接口函数之 :zmq_send_const – 从一个socket上发送一个固定内存数据
查看>>
tomcat启动是报Multiple Contexts have a path of "/XXX"
查看>>
AC-50207: Fatal: Failed to execute one or more of the config tools during Contex
查看>>
读书笔记《集体智慧编程》Chapter 3 : Discovering Groups
查看>>
python大数据工作流程
查看>>
MySQL数据库学习研究(细究Percona Server 5.6)
查看>>