文章目录

  • 1. 题目描述
    • 1.1. Limit
    • 1.2. Problem Description
    • 1.3. Input
    • 1.4. Output
    • 1.5. Sample Input
    • 1.6. Sample Output
    • 1.7. Note
    • 1.8. Source
  • 2. 解读
  • 3. 代码

1. 题目描述

1.1. Limit

Time Limit: C/C++ 1秒,其他语言2秒

Memory Limit: C/C++ 262144K,其他语言524288K

1.2. Problem Description

有一个字符串 s s s,对于字符串中一个非前缀子串恰好为字符串的前缀我们称之为ac串。

请问给出一个字符串他的ac串最大长度为多少。

1.3. Input

输入数据第一行是 t t t,表示数据的组数,接下来每组数据输入一个字符串 s ( t ≤ 10 , s ≤ 1 e 5 ) s(t \le 10,s \le 1e5) s(t≤10,s≤1e5)。

1.4. Output

输出最大长度

1.5. Sample Input

2
aaaaa
abacc

1.6. Sample Output

4
1

1.7. Note

aaaab的ac串是aaa(2:4)acac的ac串是ac(3:4)

1.8. Source

牛客网 NC207429 最大值


2. 解读

我们有了一个输入字符串 s s s,设其非前缀子串为 x x x, x ∈ s [ 1 : s i z e ( s ) ] x \in s[1:size(s)] x∈s[1:size(s)],其中 s i z e ( s ) size(s) size(s) 为字符串 s s s 的长度, [ a : b ] [a:b] [a:b] 为左闭右开区间。这道题目想要求的是最大长度的非前缀子串 x x x,满足 s [ 0 : s i z e ( x ) ] = = x s[0:size(x)] == x s[0:size(x)]==x。

这恰好就类似于 KMP算法 中 n e x t next next 数组 的定义。

n e x t [ i ] = k next[i] = k next[i]=k

其中 i i i 表示我们要判断的是字符串 s s s 的长度为 i + 1 i + 1 i+1 的子串 m = s [ 0 : i + 1 ] m = s[0:i + 1] m=s[0:i+1], k k k 表示 m m m 的前 k k k 个字符组成的子串与后 k k k 个字符组成的非前缀子串相等,即

m [ 0 : k ] = = m [ s i z e ( m ) − k : s i z e ( m ) ] m[0:k] == m[size(m) - k:size(m)] m[0:k]==m[size(m)−k:size(m)]

s i z e ( m ) − k > 0 size(m) - k > 0 size(m)−k>0

例如 aaaab 的 n e x t next next 数组为 { 0 , 1 , 2 , 3 , 0 } \{0, 1, 2, 3, 0\} {0,1,2,3,0},题目要求的ac串就是 n e x t next next 数组中的最大值对应的字符串,也就是aaa

推荐一个 KMP算法的可视化网站,里面还有各种算法的可视化,可以帮助理解。

3. 代码

#include <algorithm>
#include <iostream>
using namespace std;const int MAXN = 1e5 + 1;int Next[MAXN] = { 0 };int getNext(string p, int length)
{Next[0] = 0;Next[1] = 0;for (int i = 1; i < length; i++) {int j = Next[i];while (j && p[i] != p[j]) {j = Next[j];}Next[i + 1] = (p[i] == p[j]) ? j + 1 : 0;}return 0;
}int main()
{int t, maxN;string str;cin >> t;while (t--) {cin >> str;maxN = 0;getNext(str, str.size());for (size_t i = 1; i <= str.size(); i++) {maxN = max(Next[i], maxN);}cout << maxN << endl;}
}

联系邮箱:curren_wong@163.com

CSDN:https://me.csdn.net/qq_41729780

知乎:https://zhuanlan.zhihu.com/c_1225417532351741952

公众号复杂网络与机器学习

欢迎关注/转载,有问题欢迎通过邮箱交流。

牛客网 NC207429 最大值 KMP相关推荐

  1. 牛客网暑期ACM多校训练营(第三场): E. Sort String(KMP)

    链接:https://www.nowcoder.com/acm/contest/141/E 来源:牛客网 题目描述 Eddy likes to play with string which is a ...

  2. 牛客网《BAT面试算法精品课》学习笔记

    目录 牛客网<BAT面试算法精品课>学习笔记 牛客网<BAT面试算法精品课>笔记一:排序 牛客网<BAT面试算法精品课>笔记二:字符串 牛客网<BAT面试算法 ...

  3. 【牛客网笔试整理】美团点评 笔试整理

    链接:https://www.nowcoder.com/questionTerminal/29d1622d47514670a85e98a1f47b8e2d 来源:牛客网 已知一种新的火星文的单词由英文 ...

  4. 牛客网算法教程-中级篇-第一章

    文章目录 学习目标: 学习内容: 学习时间: 学习产出: 1.旋转词-模拟 2.旋转矩阵-模拟 3.数轴覆盖-贪心 4.1 完整字符串1(括号字符串的有效性)-栈 4.2 完整字符串2(缺失的括号)- ...

  5. 牛客网数据开发题库_练习SQL利器,牛客网SQL实战题库

    牛客网SQL实战网址:https://www.nowcoder.com/ta/sql 持续更新--记录自己在牛客网SQL的做题过程 更新进度:61题,2019-4-3,更完了 1.查找最晚入职员工的所 ...

  6. 牛客网 小白赛4 A三角形【贪心】

    [前驱]:在指定长度的棍子中找到能组成最大周长三角形的三根棍子 链接:https://www.nowcoder.com/acm/contest/134/A 来源:牛客网 题目描述 铁子从森林里收集了n ...

  7. 黑白树(牛客网+树形dp)

    链接:https://ac.nowcoder.com/acm/problem/13249 来源:牛客网 题目描述 一棵n个点的有根树,1号点为根,相邻的两个节点之间的距离为1.树上每个节点i对应一个值 ...

  8. codeforces(牛客网dp专题,排序)

    链接:https://ac.nowcoder.com/acm/problem/21314 来源:牛客网 牛牛正在打一场CF 比赛时间为T分钟,有N道题,可以在比赛时间内的任意时间提交代码 第i道题的分 ...

  9. 牛客网【每日一题】7月31日题目精讲—兔子的区间密码

    来源:牛客网 : 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言65536K 64bit IO Format: %lld 文章目录 题目描述 题解: 代码: 题 ...

最新文章

  1. 如何定制一款12306抢票浏览器——实现自动查询和预订功能
  2. HDU3949(线性基算法模版)
  3. 易邮邮箱服务器的安装和配置
  4. 优秀大数据GitHub项目一览
  5. 树莓派3 kali linux很卡,树莓派3装kali Linux 成功写入 但是点不亮 为什么?
  6. beego——模板处理
  7. 【转载】Python线程、进程和协程详解
  8. Android studio报Error:(26, 13)-v7:27.错误的解决方法
  9. android 串口一直打开_串口通讯你真的会了吗?不妨来看看这些经验
  10. 《十四堂人生创意课》读书笔记,思维导图
  11. Java类获取Spring容器的bean
  12. linux iphone 存储空间,iOS 11 将会自动删除低使用率 App来释放 iPhone 存储空间
  13. ASPUpLoad 文件上传
  14. nfc读卡java开发,Android实现读取NFC卡卡号示例
  15. 写作是普通人积累财富成本最低最有效的方式
  16. TCP/IP模型以及OSI七层参考模型各层的功能介绍和主要协议
  17. 让旧衣服换新颜 听听章泽天怎么说!
  18. OpenWRT路由器使用ipv6拨号上网教程
  19. msbuild ConfuserEx.Build 加密
  20. 谁认识马云-马云传记读后感

热门文章

  1. FillChar的使用方法
  2. c 服务器文件预览,服务器下C:\Windows\assembly内的内容变成一个一个文件夹显示的...
  3. USACO starry
  4. Windows误删注册表恢复方法
  5. Revit二次开发——读取cad中的文字信息
  6. GitChat 携手「异步社区」送大礼
  7. LVS负载均衡调度原理及配置方法
  8. html中定义动画名字和规则,@keyframes
  9. 移动H5首屏秒开优化方案
  10. 蜡炬教育:我们的学员很受企业欢迎,因为他们去了就能直接工作