nowcoder-15165-字符串问题-kmp

2023-11-14

题目描述
有一个字符串 让你找到这个字符串 S 里面的子串T 这个子串 T 必须满足即使这个串的前缀 也是这个
串的后缀 并且 在字符串中也出现过一次的(提示 要求满足前后缀的同时也要在字符串中出现一次 只是前后缀可不行 输出最长满足要求字符串)

输入描述:
给出一个字符串 长度 1 到 1e6 全部是小写字母

输出描述:
如果找的到就输出这个子串T 如果不行就输出 Just a legend

示例1
输入

fixprefixsuffix

输出
fix

示例2
输入

abcdabc

输出
Just a legend

题意非常简单明了,求出最长的子串,使得这个子串即是前缀也是后缀,并且在字符串中出现过

有一个比较重要的一点可能不容易被考虑到,比如有一个字符串是:
abababa
那么对于这个字符串来讲的最长的子串就是aba,貌似是可以有重叠的部分

通过题意,很容易想到不考虑中间出现过该字串的情况,我们可以考虑使用KMP,KMP中有一个重要的性质就是最长公共的前后缀。因此在不考虑中间存在的情况时,我们就可以输出该字符串 前next[len]个字符
如果说next[len] == -1 那么说就不存在这个子串
那么考虑上中间出现过该字符串的情况:
我们记录下最后一个点的next值,看这个值出现过是不是 > 0次,如果说 > 0次,就输出前面的[0 , next[len] ] 即可
反之再看next[next[len]] 是否 > 0, > 0就输出 [0 , next[next[len] ]反之输出 Just a legend

const int mod = 1000000007;
#define PI acos(-1.0)
typedef int itn;
int nex[1000007];
string s;
int len;
void getNex(){
    int i=0,j=-1;
    nex[0] = -1;
    while(i < len){
        if(j == -1 || s[i] == s[j]) nex[++i] = ++j;
        else j = nex[j];
    }
}
int cnt[maxn];
int main() {
    cin >> s;
    len = s.size();
    getNex();
    for(int i=1;i<len;i++) cnt[nex[i]] += 1;
    /// for(int i=0;i<=len;i++) cout<<i<<' '<<nex[i] << endl;
    int t = nex[len];
    /// cout<< t << endl;
    if(t <= 0) puts("Just a legend");
    else{
        if(cnt[t]) cout<<s.substr(0,t)<<endl;
        else if(nex[t]) cout<<s.substr(0,nex[t]) <<endl;
        else puts("Just a legend");
    }
    return 0;
}
/**
abababa
aba
**/
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

nowcoder-15165-字符串问题-kmp 的相关文章

  • 【扩展KMP】POJ_3450| HDU_2328 Corporate Identity

    原题直通车 POJ 3450 Corporate Identity HDU 2328 Corporate Identity 题意概述 找出N个串中最长公共子串 分析 一 可以直接枚举其中一个串的所有字串 跟所有串进行匹配找到结果 二 用其中
  • 8.翻转子串

    题目描述 假定我们都知道非常高效的算法来检查一个单词是否为其他字符串的子串 请将这个算法编写成一个函数 给定两个字符串s1和s2 请编写代码检查s2是否为s1旋转而成 要求只能调用一次检查子串的函数 给定两个字符串s1 s2 请返回bool
  • 必刷算法题之字符串(题目及代码)---C++

    文章目录 第1题 执行操作后的变量值 第2题 罗马数字转整数 第3题 句子中的最多单词数 第4题 左旋转字符串 第5题 宝石与石头 第6题 Excel 表中某个范围内的单元格 第7题 括号的最大嵌套深度 第8题 分割平衡字符串 第9题 最长
  • 如何在JavaScript中删除字符串的第一个字符

    Let s say you have a string and you want to remove the first character in it 假设您有一个字符串 并且想要删除其中的第一个字符 How can you do so
  • 在事情没有变得糟糕之前_这是我们没有的问题的糟糕解决方案

    在事情没有变得糟糕之前 最糟糕的代码是什么 不要说JavaScript 它会在你身上成长 不 也不是Perl 好的 所以Perl非常令人讨厌 最糟糕的代码 这是我们不需要的代码 紧接着是几乎有效的代码 然后是无效的代码 几乎可以正常工作的代
  • 微信小程序富文本标签rich-text的使用

    wxml 接收对象数组
  • 443.压缩字符串

    443 压缩字符串 给你一个字符数组 chars 请使用下述算法压缩 从一个空字符串 s 开始 对于 chars 中的每组 连续重复字符 如果这一组长度为 1 则将字符追加到 s 中 否则 需要向 s 追加字符 后跟这一组的长度 压缩后得到
  • Python求三位水仙花数

    Python求三位水仙花数 简介 水仙花数 是指一个三位整数 其各位数字的3次方和等于该数本身 例如 ABC是一个 3位水仙花数 则 A的3次方 B的3次方 C的3次方 ABC 基础掌握 Python str 函数 https www ru
  • mysql基本数据类型

    概述 要想学好mysql 了解其支持的基本数据类型以及内部原理是极为重要的 只有这样 我们才能根据不同的业务要求来选择不同的数据类型 实现最佳的存储效果和查询性能 因而本文就着重总结一下mysql支持的数据类型以及内部的存储原理 总体来说
  • Python命令行参数定义及注意事项

    在命令行中运行python代码是很常见的 下面介绍如何定义命令后面跟的参数 常规用法 Python代码中主要使用下面几行代码来定义并获取需要在命令行中赋值的参数 import argparse parser argparse Argumen
  • Java基础之String类型详解

    目录 1 简介 2 字符串的比较 3 String的实例化方式 1 直接赋值方式 2 构造方法实例化 4 String对象 常量 池 5 字符串修改 6 String类常用方法 1 字符串查找 2 字符串替换 3 字符串拆分 4 字符串截取
  • Java中占位符的实战运用

    java中的占位符 有以下几种等等 s字符串类型的占位符 b布尔类型的占位符 d整数类型的占位符 c字符类型的占位符 我们大多情况就只用前两种 举个例子 Created by xiwen on 2021 1 14 Slf4j public
  • 小饼干问题 find寻找字符串 substr截取字符串

    所有人的回复都由大写字母 小写字母与 组成 占一行 MJJ认为只要其中包含了连续的10个小写字母 zailaiyihe 就意味着这个人想要再来一盒 题目描述 现在MJJ准备给每一个想要 再来一盒 的人买一盒小饼干 他想知道总共需要买几盒小饼
  • 力扣 942. 增减字符串匹配 双指针解法C++

    给定只含 I 增大 或 D 减小 的字符串 S 令 N S length 返回 0 1 N 的任意排列 A 使得对于所有 i 0 N 1 都有 如果 S i I 那么 A i lt A i 1 如果 S i D 那么 A i gt A i
  • 表示数值的字符串(含思路解答示意图)【剑指offer——JAVA实现】

    题目描述 请实现一个函数用来判断字符串是否表示数值 包括整数和小数 例如 字符串 100 5e2 123 3 1416 和 1E 16 都表示数值 但是 12e 1a3 14 1 2 3 5 和 12e 4 3 都不是 解法一 思路 状态机
  • 【HJ31】 单词倒排

    题目描述 对字符串中的所有单词进行倒排 说明 1 构成单词的字符只有26个大写或小写英文字母 2 非构成单词的字符均视为单词间隔符 3 要求倒排后的单词间隔符以一个空格表示 如果原字符串中相邻单词间有多个间隔符时 倒排转换后也只允许出现一个
  • 【Java】Java中的String类

    文章目录 一 认识 String 类 二 String 类的常用方法 2 1 构造方法 2 2 String 类对象之间的比较 2 3 字符串查找 2 4 字符串的转换 2 5 字符串替换 2 6 字符串拆分 2 7 字符串截取 2 8 字
  • (Java)leetcode-76 Minimum Window Substring(最小覆盖子串)

    题目描述 给你一个字符串 s 一个字符串 t 返回 s 中涵盖 t 所有字符的最小子串 如果 s 中不存在涵盖 t 所有字符的子串 则返回空字符串 注意 如果 s 中存在这样的子串 我们保证它是唯一的答案 示例 1 输入 s ADOBECO
  • Unicode编码小结

    Unicode编码 一 ASCLL码 ASCII American Standard Code for Information Interchange 美国信息交换标准代码 是基于拉丁字母的一套电脑编码系统 主要用于显示现代英语和其他西欧语
  • 滑动窗口专题(字节面试题)

    关键字 连续数组 字串 1 和为s的连续正整数序列 剑指offer57 II 输入一个正整数 target 输出所有和为 target 的连续正整数序列 至少含有两个数 序列内的数字由小到大排列 不同序列按照首个数字从小到大排列 示例 1

随机推荐

  • ubuntu 18.04 安装 opencv-2.4.13.6

    ubuntu 18 04 安装 opencv 2 4 13 6 1 opencv 2 4 13 6下载 2 安装opencv 2 4 13 6 1 解压opencv 2 4 13 6 zip到根目录下 2 安装opencv 2 4 13 6
  • 几个友好Java代码习惯建议

    我工作多年 遇到过各种各样的同事 我见过各种代码 优秀的 垃圾的 没有吸引力的等等 所以这篇文章记录了一个优秀的Java开发应该具备哪些良好的开发习惯或最佳实践 1 封装方法参数 当你的方法参数过多时 建议封装一个对象 下面是反面教材 谁教
  • 理解傅里叶分析

    一 什么是频域 从我们出生 我们看到的世界都以时间贯穿 股票的走势 人的身高 汽车的轨迹都会随着时间发生改变 这种以时间作为参照来观察动态世界的方法我们称其为时域分析 而我们也想当然的认为 世间万物都在随着时间不停的改变 并且永远不会静止下
  • 【Mybatis】mybatis3入门

    mybatis简介 MyBatis 是一款优秀的持久层框架 它支持定制化 SQL 存储过程以及高级映射 MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集 MyBatis 可以使用简单的 XML 或注解来配置和映射
  • 【经验分享】- 这是一份来自 IT 男的电脑使用建议

    这是一份来自 IT 男的电脑使用建议 1 写在前面 2018 年高考结束我拿到了第一台笔记本电脑 此前对电脑接触地并不多 因此在这几年的电脑使用过程中积累了一些个人使用经验和使用技巧想要分享给可能还是电脑小白的你 个人一直以来用的还是 Wi
  • 自己动手定制Chromium系列之四:Chromium 58的一个编译配置

    aec untrusted delay for testing Current value from the default false From third party webrtc modules audio processing BU
  • (成功解决)Python连接clickhouse

    第一次尝试用Python连接clickhouse数据库 踩了不少坑 特此记录 帮助后人少犯错 运行环境 python 3 8 3 clickhouse driver 0 2 3 clickhouse sqlalchemy 0 2 0 sql
  • Linux-(C/C++)动态链接库生成以及使用(libxxx.so)

    linux静态库生成与使用 http www cnblogs com johnice archive 2013 01 17 2864319 html Linux中so文件为共享库 与windows下dll类似 不过实现要简单 so可以供多个
  • 小熊错误_小熊派4G开发板初体验

    开发板硬件资源介绍 前阵子小熊派发布了一款超高性价比的4G开发板 但是板子仅限量1000套 小熊派官方给我送了一块 我们一起来学习学习 板子做得小巧精致 控制核心用的是移远的EC100Y LTE Cat1无线通信模组 该模组可对所有用户开放
  • Python开发环境Wing IDE如何使用调试功能

    在使用Wing IDE开始调试的时候 需要设置断点的行 读取GetItemCount函数的返回 这可以通过单击行并选择Break工具栏条目 或通过单击行左边的黑色边缘 断点应该以实心红圈的形式出现 接下来使用绿色箭头图标开始调试或在Debu
  • 基于微信小程序的健身小助手小程序

    文末联系获取源码 开发语言 Java 框架 ssm JDK版本 JDK1 8 服务器 tomcat7 数据库 mysql 5 7 8 0 数据库工具 Navicat11 开发软件 eclipse myeclipse idea Maven包
  • Mysql中分组后取最新的一条数据

    在 SQL 中 你可以使用子查询和 ORDER BY 子句来实现按照特定字段进行分组 并获取每个分组中最新的一条记录 SELECT t1 FROM your table t1 INNER JOIN SELECT id MAX timesta
  • 云技术平台赋能媒体融合发展创新

    欢迎大家前往腾讯云技术社区 获取更多腾讯海量技术实践干货哦 作者 熊普江 媒体行业是传统而又新兴的行业 在数字化 信息化 移动化快速演进的今天 无论是用户 社会还是行业 政府都意识到 传统媒体与新兴媒体融合发展是必然之路 但媒体融合需要内容
  • 2021-07-14 React 代码规范整理

    文章目录 React 代码规范 1 基础规则 2 组件声明 1 组件名称和定义该组件的文件名称建议要保持一致 2 不要使用 displayName 属性来定义组件的名称 应该在 class 或者 function 关键字后面直接声明组件的名
  • 烟花代码

    div div
  • 日志-Log4J

    日志 程序中的日志可以用来记录程序在运行的时候点点滴滴 并可以进行永久存储 日志和输出语句的区别 输出语句 日志技术 取消日志 需要修改代码 灵活性比较差 不需要修改代码 灵活性比较好 输出位置 只能是控制台 可以将日志信息写入到文件或者数
  • R语言之 as.formula()

    今天学到一个东西 R 语言回归函数里面的公式函数 as formula 其作用就是将字符串转换成公式 gt aa ReadCount Age BMI Sex HAMD 1 1 Sex gt aa 1 ReadCount Age BMI Se
  • MFC之滑块与旋转控件23

    1 滑块 首先看看滑块相关的内容 从sitch看到 滑块分为五个内容 分别是矩形滑块位置 滑块左右两边的箭头 和矩形滑块分别距离左右两边的空间 1 先添加滑块控件和显示矩形滑块的位置编辑区 2 右击编辑区添加变量为int类型 3 添加滑块为
  • Qt实现不同项目的信号传递

    Qt实现windows通信 不同项目的窗口通信 有关Qt通信的知识 windows要实现不同项目窗口通信 需要用类似于windows h的api接口 数据传输主要通过 typedef struct tagCOPYDATASTRUCT cds
  • nowcoder-15165-字符串问题-kmp

    题目描述 有一个字符串 让你找到这个字符串 S 里面的子串T 这个子串 T 必须满足即使这个串的前缀 也是这个 串的后缀 并且 在字符串中也出现过一次的 提示 要求满足前后缀的同时也要在字符串中出现一次 只是前后缀可不行 输出最长满足要求字