459. 重复的子字符串

459. 重复的子字符串

  • 原题链接:
  • 完成情况:
  • 解题思路:
  • 参考代码:
    • __459重复的子字符串_枚举
    • __459重复的子字符串_字符串匹配
    • __459重复的子字符串_KMP算法
    • __459重复的子字符串_优化的KMP算法
  • 错误经验吸取

原题链接:

459. 重复的子字符串

https://leetcode.cn/problems/repeated-substring-pattern/submissions/

完成情况:

在这里插入图片描述

解题思路:

思路与算法如果一个长度为 nnn 的字符串 sss 可以由它的一个长度为 n′n'n 
′的子串 s′s's 
′重复多次构成,那么:nnn 一定是 n′n'n 
′的倍数;s′s's 
′一定是 sss 的前缀;对于任意的 i∈[n′,n)i \in [n', n)i∈[n 
′,n),有 s[i]=s[i−n′]s[i] = s[i-n']s[i]=s[i−n 
′]。也就是说,sss 中长度为 n′n'n 
′的前缀就是 s′s's 
′,并且在这之后的每一个位置上的字符 s[i]s[i]s[i],都需要与它之前的第 n′n'n 
′个字符 s[i−n′]s[i-n']s[i−n 
′] 相同。因此,我们可以从小到大枚举 n′n'n 
′,并对字符串 sss 进行遍历,进行上述的判断。注意到一个小优化是,因为子串至少需要重复一次,所以 n′n'n 
′不会大于 nnn 的一半,我们只需要在 [1,n2][1, \frac{n}{2}][1, 
2
n
​] 的范围内枚举 n′n'n 
′即可。

参考代码:

__459重复的子字符串_枚举

package 代码随想录.字符串;public class __459重复的子字符串_枚举 {//给定一个非空的字符串 s ,检查是否可以通过由它的一个子串重复多次构成。/**方法一: 双重for循环,其中一个for循环,用i,j记录起始,截止位置;;另一个for循环,用于剩余的j到结尾。*/public boolean repeatedSubstringPattern(String s) {/*提示:1 <= s.length <= 104s 由小写英文字母组成解法1:调用KMP算法/暴力for循环?,将一个部分,分成从[0,i]和[i+1,s.length-1]的两个子串。*/int n = s.length();for (int i = 1;i*2 <= n;i++){   //要能够匹配,最多只能遍历一般即可。if (n % i == 0){    //把i作为匹配对象boolean match = true;for (int j = i;j < n;j++){     //j是匹配位置if (s.charAt(j)!= s.charAt(j-i)){   //同步j-i位置。【i为配对对象】match = false;break;}}if (match){return true;}}}return false;}
}

__459重复的子字符串_字符串匹配

package 代码随想录.字符串;public class __459重复的子字符串_字符串匹配 {/*** 调用方法进行配对** @param s* @return*/public boolean repeatedSubstringPattern(String s){return (s+s).indexOf(s,1) != s.length();}
}

__459重复的子字符串_KMP算法

package 代码随想录.字符串;import java.util.Arrays;public class __459重复的子字符串_KMP算法 {public boolean repeatedSubstringPattern(String s) {//确定一个固定的长度的字符串,去kmp配对另一个相同长度的字符串。return myKMP(s+s,s);    //这道题的原本是判别s是否是由某组字符重复构成}/**** @param query* @param pattern* @return*/private boolean myKMP(String query, String pattern) {int n = query.length();int m = pattern.length();int  [] fail = new int[m];Arrays.fill(fail,-1);for (int i = 1;i<m;i++){int j = fail[i-1];while (j != -1 && pattern.charAt(j+1)!= pattern.charAt(i)){j = fail[j];}if (pattern.charAt(j+1) == pattern.charAt(i)){fail[i] = j +1;}}int match = -1;for (int i = 1;i<n-1;i++){while (match != -1 && pattern.charAt(match + 1) != query.charAt(i)){match = fail[match];}if (pattern.charAt(match + 1) == query.charAt(i)){match++;if (match == m-1){return true;}}}return false;}
}

__459重复的子字符串_优化的KMP算法

package 代码随想录.字符串;import java.util.Arrays;public class __459重复的子字符串_优化的KMP算法 {public boolean repeatedSubstringPattern(String s) {//确定一个固定的长度的字符串,去kmp配对另一个相同长度的字符串。return myKMP(s);    //这道题的原本是判别s是否是由某组字符重复构成}/**** @param pattern* @return*/private boolean myKMP(String pattern) {int n = pattern.length();int [] fail = new int[n];Arrays.fill(fail,-1);for (int i = 1;i<n;i++) {int j = fail[i-1];while (j!= -1 && pattern.charAt(j+1)!= pattern.charAt(i)){j = fail[j];}if (pattern.charAt(j+1) == pattern.charAt(i)){fail[i] = j +1;}}return fail[n-1] != -1 && n%(n- fail[n-1] - 1) == 0 ;}}

错误经验吸取

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/139567.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

酷开科技持续推动智能投影行业创新发展

近年来&#xff0c;投影仪逐渐成为年轻人追捧的家居时尚单品。据国际数据公司&#xff08;IDC&#xff09;报告显示&#xff0c;2022年中国投影机市场总出货量505万台&#xff0c;超80%为家用投影仪。相比于电视&#xff0c;投影仪外观小巧、屏幕大小可调节&#xff0c;无论是卧…

OpenCV:图像旋转与缩放

人工智能的学习之路非常漫长&#xff0c;不少人因为学习路线不对或者学习内容不够专业而举步难行。不过别担心&#xff0c;我为大家整理了一份600多G的学习资源&#xff0c;基本上涵盖了人工智能学习的所有内容。点击下方链接,0元进群领取学习资源,让你的学习之路更加顺畅!记得…

从白日梦到现实:推出 Elastic 的管道查询语言 ES|QL

作者&#xff1a;George Kobar, Bahubali Shetti, Mark Settle 今天&#xff0c;我们很高兴地宣布 Elastic 的新管道查询语言 ES|QL&#xff08;Elasticsearch 查询语言&#xff09;的技术预览版&#xff0c;它可以转换、丰富和简化数据调查。 ES|QL 由新的查询引擎提供支持&am…

vmware16.2内部win7联网

1、主机配置 前置条件&#xff1a;DHCP和NAT服务已启动 设置无线IP与虚拟机IP为自动获取 二者都是&#xff1a;右键-属性 选择IPv4 自动获取 2、虚拟机配置 设置虚拟机上网方式为NAT 菜单栏-虚拟机-设置 NMnet8改为NAT模式 菜单栏-编辑-虚拟网络编辑器 win7系统内部网…

13. 高精度延时

13. 高精度延时 GPT 定时器简介GPT 定时器结构GPT 定时器工作模式 GPT 定时器相关寄存器GPTx_CRGPTx_PRGPTx_SRGPTx_CNTGPTx_OCR GPT 配置步骤程序编写bsp_delay.hbsp_delay.cmain GPT 定时器简介 GPT 定时器是一个 32 位向上定时器&#xff0c;也就是从0x00000000 开始向上递…

【算法与数据结构】93、LeetCode复原 IP 地址

文章目录 一、题目二、解法三、完整代码 所有的LeetCode题解索引&#xff0c;可以看这篇文章——【算法和数据结构】LeetCode题解。 一、题目 二、解法 思路分析&#xff1a;参照【算法与数据结构】131、LeetCode分割回文串的思路&#xff0c;需要将IP字符串进行分割&#xff0…

No181.精选前端面试题,享受每天的挑战和学习

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云课上架的前后端实战课程《Vue.js 和 Egg.js 开发企业级健康管理项目》、《带你从入…

k8s-实验部署 1

1、k8s集群部署 更改所有主机名称和解析 开启四台实验主机&#xff0c;k8s1 仓库&#xff1b;k8s2 集群控制节点&#xff1b; k8s3 和k8s4集群工作节点&#xff1b; 集群环境初始化 使用k8s1作为仓库&#xff0c;将所有的镜像都保存在本地&#xff0c;不要将集群从外部走 仓库…

班级新闻管理系统asp.net+sqlserver

班级新闻管理系统 附加功能 新闻图片&#xff0c;点击次数访问自增&#xff0c;每个人都只能增删改查自己发布的新闻&#xff0c;并可以看到所有人发布的新闻 运行前附加数据库.mdf&#xff08;或sql生成数据库&#xff09; 主要技术&#xff1a; 基于asp.net架构和sql serve…

剑指JUC原理-16.读写锁

&#x1f44f;作者简介&#xff1a;大家好&#xff0c;我是爱吃芝士的土豆倪&#xff0c;24届校招生Java选手&#xff0c;很高兴认识大家&#x1f4d5;系列专栏&#xff1a;Spring源码、JUC源码&#x1f525;如果感觉博主的文章还不错的话&#xff0c;请&#x1f44d;三连支持&…

利用百度地图api获取经纬度和uniapp定位计算距离

获取百度地图api&#xff0c;成为开发者&#xff0c;去控制台创建应用得到一个ak就可以了 百度地图开放平台网址&#xff1a;百度地图开放平台 | 百度地图API SDK | 地图开发 后端是node // 根据百度api地址获取经纬度 https://lbsyun.baidu.com/async getLocation(val) {try …

【修车案例】一波形一案例(9)

故障车型&#xff1a;捷豹X-Type 故障现象&#xff1a;发动机故障指示灯点亮&#xff0c;加速时动力不足&#xff0c;扫描工具显示EGR阀和涡轮增压器增压控制位置传感器电路故障 示波器诊断&#xff1a;检测增压控制位置传感器电路的完整性 A通道 - 增压控制执行电机电源电压B通…

【SoC基础】DMA的工作原理

&#x1f4e2;&#xff1a;如果你也对机器人、人工智能感兴趣&#xff0c;看来我们志同道合✨ &#x1f4e2;&#xff1a;不妨浏览一下我的博客主页【https://blog.csdn.net/weixin_51244852】 &#x1f4e2;&#xff1a;文章若有幸对你有帮助&#xff0c;可点赞 &#x1f44d;…

Technology Strategy Patterns 学习笔记8- Communicating the Strategy-Decks(ppt模板)

1 Ghost Deck/Blank Deck 1.1 It’s a special way of making an initial deck that has a certain purpose 1.2 you’re making sure you have figured out what all the important shots are before incurring the major expense of shooting them 1.3 需要从技术、战略、产…

详解数据仓库之拉链表(原理、设计以及在Hive中的实现)

最近发现一本好书&#xff0c;读完感觉讲的非常好&#xff0c;首先安利给大家&#xff0c;国内第一本系统讲解数据血缘的书&#xff01;点赞&#xff01;近几天也会安排朋友圈点赞赠书活动(ง•̀_•́)ง 0x00 前言 本文将会谈一谈在数据仓库中拉链表相关的内容&#xff0c;包…

PanNet: A deep network architecture for pan-sharpening(ICCV 2017)

文章目录 AbstractIntroduction过去方法存在的问题我们提出新的解决方法Related work PanNet: A deep network for pan-sharpening&#xff08;PanNet:用于泛锐化的深度网络&#xff09;Background and motivationPanNet architectureSpectral preservationStructural preserva…

在任何机器人上实施 ROS 导航堆栈的指南

文章目录 路径规划参考 路径规划 路径规划是导航的最终目标。这允许用户向机器人给出目标姿势&#xff0c;并让它在给定的环境中自主地从当前位置导航到目标位置。这是我们迄今为止所做的一切&#xff08;地图绘制和本地化&#xff09;的汇集点。ROS 导航堆栈已经为我们完成了…

【Delphi】 各个平台使用 ntfy 效果说明

目录 一、Delphi 中使用 ntfy 库下载地址 二、各个平台使用效果说明 1. android 平台 2. ios 平台 3. windows 平台 三、总结 一、Delphi 中使用 ntfy 库下载地址 官方的文档地址&#xff1a;ntfyDelphi 接口库地址&#xff1a;GitHub - hazzelnuts/ntfy-for-delphi at …

智能AI系统ChatGPT系统源码+支持GPT4.0+支持ai绘画(Midjourney)/支持OpenAI GPT全模型+国内AI全模型

一、AI创作系统 SparkAi创作系统是基于OpenAI很火的ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统&#xff0c;支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美&#xff0c;可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如…

BGP基本配置实验

目录 一、实验拓扑 二、实验需求 三、实验步骤 1、IP地址配置 2、内部OSPF互通&#xff0c;配置OSPF协议 3、BGP建立邻居关系 4、R1和R5上把业务网段宣告进BGP 5、消除路由黑洞&#xff0c;在R2、R4上做路由引入 6、业务网段互通 一、实验拓扑 二、实验需求 1、按照图…