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…

Git基础知识学习常用命令一

常用命令 $ git status 工作区域与仓库保持一致step2: 暂存状态 $ git add --all # 当前项目下的所有更改 $ git add . # 当前目录下的所有更改 $ git add xx/xx.py xx/xx2.py # 添加某几个文件Step3: commit $ git commit -m"<这里写commit的描述>" 已提…

vmware16.2内部win7联网

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

android studio离线tips

由于种种原因&#xff08;你懂的&#xff0c;导致我们使用android studio会有很多坑&#xff0c;这里记录一下遇到的问题以及解决方案 环境问题 无法下载gradle 因为android studio采用gradle作为构建工具&#xff0c;国内gradle没有镜像下载非常慢&#xff0c;并且大概率失…

13. 高精度延时

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

大数据开发数据治理方向

模型合规&#xff08;包括了元数据治理&#xff0c;原来只到了元数据层次&#xff09;&#xff1a;1.数据标准重制定及修复&#xff0c;包括对原来数据域重构&#xff0c;表字段命名体系重构&#xff0c;并对原来模型按照新标准合规改造 2.元数据补充 owner、使用说明、字段中文…

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

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

ChatGPT王炸升级

刚刚出炉的新GPT&#xff0c;可以在公司内部共享或对所有人公开。 从此&#xff0c;“GPT开发者”像“iOS开发者”一样成为了新的职业&#xff0c;让AI替你赚钱的梦想成真了。 与此同时&#xff0c;现有的GPT-4也迎来一大波更新。 新版本GPT-4 Turbo&#xff0c;支持128k上下…

K8S篇之k8s常用操作指令

1、常见kubectl操作指令 // 获取k8s集群node信息 kubectl get nodes // 描述一个node 信息 kubectl desctibe nodes NODE_NAME // 描述所有pod信息 kubectl describe pods // 查看namespace列表 kubectl get namespaces // 创建namespace kubectl create ns 命名空间名称 // 查…

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

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

TreeMap

715. Range 模块 class RangeModule {TreeMap<Integer, Integer> m = new TreeMap<>

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 …

高二英语上

unit 1 1.yarn三种意思 1.码&#xff1b; 2.庭院&#xff0c;天井&#xff1b; 3.花园&#xff1b;down**down 在这里是介词,也可以作副词&#xff0c;与 down 相对的是 up。请比较下列两句: 1.Look! Hes driving down the street . 2.Look! Hes driving up the street .这两例…

Splunk Connect for Kafka – Connecting Apache Kafka with Splunk

1: 背景: 1: splunk 有时要去拉取kafka 上的数据: 下面要用的有用的插件:Splunk Connect for Kafka 先说一下这个Splunk connect for kafka 是什么: What is Splunk Connect for Kafka? Spunk Connect for Kafka is a “sink connector” built on the Kafka Connect…

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

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