重复的子字符串

题意:

给定一个非空的字符串 s ,检查是否可以通过由它的一个子串重复多次构成。

示例 1:

输入: s = “abab”
输出: true
解释: 可由子串 “ab” 重复两次构成。

示例 2:

输入: s = “aba”
输出: false

示例 3:

输入: s = “abcabcabcabc”
输出: true
解释: 可由子串 “abc” 重复四次构成。 (或子串 “abcabc” 重复两次构成。)

提示:

  • 1 <= s.length <= 10^4
  • s 由小写英文字母组成

题目来源: https://leetcode.cn/problems/repeated-substring-pattern/description/

解题方法:

方法一:从前往后主键加一截取长度作为子串,重复拼接该子串,是否与原字符串相等

// 从前往后主键加一截取长度作为子串,重复拼接该子串,是否与原字符串相等
function repeatedSubstringPattern($s) {$len = strlen($s);if($len == 1){return false;}for($i = 1; $i < $len; $i++){// 从长度为1到s的长度减1,作为子字符串$child_string = substr($s, 0, $i); // 重复子字符串,这里多重复一次是为了处理原长度为奇数时的情况$repeat_string = str_repeat($child_string, intval(($len / $i) + 1));   // 截掉多重复的一次子字符串 $repeat_string_s = substr($repeat_string, 0, strlen($repeat_string) - $i);if($repeat_string_s == $s){return true;}}return false;
}

方法二:字符串匹配,参考KMP算法

// 字符串匹配,参考KMP算法
function repeatedSubstringPattern($s) {return strpos(substr($s . $s, 1, -1), $s) !== false;
}

方法三:KMP算法,找出最大重复前缀+后缀

// KMP算法,找出最大重复前缀+后缀
function repeatedSubstringPattern($s) {$j = 0;$next[0] = 0;$len = strlen($s);for($i = 1; $i < $len; $i++){while($j > 0 && $s[$i] != $s[$j]){$j = $next[$j - 1];}if($s[$i] == $s[$j]){$j++;}$next[$i] = $j;}if($next[$len - 1] > 0 && $len % ($len - $next[$len - 1]) == 0){return true;}return false;
}  

方法二、三参考:
作者:代码随想录
链接: https://leetcode.cn/problems/repeated-substring-pattern/solutions/1705527/by-carlsun-2-g3iz/
来源:力扣(LeetCode)

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

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

相关文章

Python自动化办公:PDF文件的分割与合并

我们平时办公中&#xff0c;可能需要对pdf进行合并或者分割&#xff0c;但奈何没有可以白嫖的工具&#xff0c;此时python就是一个万能工具库。 其中PyPDF2是一个用于处理PDF文件的Python库&#xff0c;它提供了分割和合并PDF文件的功能。 在本篇博客中&#xff0c;我们将详细…

服务器数据恢复—服务器重装系统导致逻辑卷发生改变的数据恢复案例

服务器数据恢复环境&#xff1a; 某品牌linux操作系统服务器&#xff0c;服务器中有4块SAS接口硬盘组建一组raid5阵列。服务器中存放的数据有数据库、办公文档、代码文件等。 服务器故障&检测&#xff1a; 服务器在运行过程中突然瘫痪&#xff0c;管理员对服务器进行了重装…

MySQL的Linux安装

在MySQL官网下载压缩包MySQL :: Download MySQL Community Server (Archived Versions) 下载完成后将压缩包上传到Linux中。我这里是下的CentOS的压缩包。 并且用的是FinalShell连接工具&#xff0c;可以选择压缩包直接上传。 ​ 上传完毕后&#xff0c;新建mysql文件夹&…

vue3中readonly和shallowReadonly

readonly: 深度只读数据 获取一个对象 (响应式或纯对象) 或 ref 并返回原始代理的只读代理。 只读代理是深层的&#xff1a;访问的任何嵌套 property 也是只读的。 shallowReadonly 浅只读数据 创建一个代理&#xff0c;使其自身的 property 为只读&#xff0c;但不执行…

在线陪诊系统: 医学科技的革新之路

医疗服务的数字化时代已经到来&#xff0c;而在线陪诊系统正是医学科技革新的杰出代表。通过巧妙的技术代码&#xff0c;这一系统不仅实现了患者和医生之间的远程互动&#xff0c;还将医疗服务推向了一个更加智能化的未来。在这篇文章中&#xff0c;我们将深入探讨在线陪诊系统…

办公软件定制开发在企业发展中的优势|app小程序搭建

办公软件定制开发在企业发展中的优势|app小程序搭建 如今&#xff0c;办公软件已经成为企业日常工作的必需品。很多企业为了提高工作效率和满足自身业务需要&#xff0c;选择定制开发办公软件。下面将介绍定制开发办公软件在企业发展中的优势。 1定制开发办公软件可以满足企业…

【量子计算机】量子计算机是什么?优缺点和当前的研究进展情况

近来有看到量子计算机相关信息&#xff0c;对未来可能是一个新的趋势。量子计算领域属于一个新兴高速发展的领域&#xff0c;在近二十年间&#xff0c;不论是量子算法的研究&#xff0c;还是量子芯片的研发均取得了巨大的进展。由于量子计算的理论研究有限&#xff0c;目前所说…

自动驾驶—MPC模型预测控制算法工程实现

文章目录 概要研究对象MPC 控制器算法原理技术细节 —— 使用MATLAB实现MPC 控制器算法小结MyRelatedWorks概要 考虑到之前在我的公众号写的MPC控制器得到了大家的很多阅读和转载量,我将此文章再完善一下,让人更容易理解些,希望对大家有帮助。 研究对象 LQR的研究对象是现…

9.4 Windows驱动开发:内核PE结构VA与FOA转换

本章将继续探索内核中解析PE文件的相关内容&#xff0c;PE文件中FOA与VA,RVA之间的转换也是很重要的&#xff0c;所谓的FOA是文件中的地址&#xff0c;VA则是内存装入后的虚拟地址&#xff0c;RVA是内存基址与当前地址的相对偏移&#xff0c;本章还是需要用到《内核解析PE结构导…

短视频账号矩阵系统开发--saas源头技术开发(手机版)

目前PC端网页版基本上已经很倦市场了&#xff0c;所以在这种情况下 &#xff0c;我们已经专注开发短视频矩阵系统pc版3年了&#xff0c;目前我们这边核心技术优势就是都是自己一手搭建开发的并且我们的剪辑算法也是自己一手源头开发的&#xff0c;剪辑成本后期运营成本低&#…

万宾科技第四代可燃气体监测仪的作用

燃气作为一种重要的能源已在居民生活、工业生产和商业活动等领域得到了广泛的应用。但是与之而来的便是各种各样的燃气管网的安全问题&#xff0c;其中燃气管网泄漏成为了城市生命线建设中亟待解决的安全隐患。因此采取切实有效的措施来保障燃气管网的安全运行&#xff0c;应用…

MySQL存储引擎如何优化索引搜索的

索引覆盖 就是查询字段在索引的B树的叶子节点里 索引下推 innoDB会在存储层进行一些判断&#xff0c;而不是发送回server层&#xff0c;减少一些开销 MRR(Multi-Range Read)机制 回表不仅仅是磁盘io的问题&#xff0c;更恐怖的事磁盘的随机io&#xff01;想想这样一种情况…

docker容器入门

docker容器入门 1.1 容器介绍 容器技术是一种操作系统级的虚拟化技术&#xff0c;它允许在一个物理或虚拟机上运行多个隔离的应用程序实例&#xff0c;每个实例都被封装在一个独立的容器中。每个容器都包含应用程序及其依赖的运行时环境&#xff0c;如操作系统、库文件和配置…

leetcode:2864. 最大二进制奇数(python3解法)

难度&#xff1a;简单 给你一个 二进制 字符串 s &#xff0c;其中至少包含一个 1 。 你必须按某种方式 重新排列 字符串中的位&#xff0c;使得到的二进制数字是可以由该组合生成的 最大二进制奇数 。 以字符串形式&#xff0c;表示并返回可以由给定组合生成的最大二进制奇数。…

Linux(9):正规表示法与文件格式化处理

简单的说&#xff0c;正规表示法就是处理字符串的方法&#xff0c;他是以行为单位来进行字符串的处理行为&#xff0c;正规表示法透过一些特殊符号的辅助&#xff0c;可以让使用者轻易的达到【搜寻/删除/取代】某特定字符串的处理程序。 正规表示法基本上是一种【表示法】&…

content_script.js、background.js和popup.js之间的通讯

1. content_script.js 和 background.js 之间的通信&#xff1a; 使用 chrome.runtime.sendMessage 发送消息&#xff0c;然后在 background.js 中使用 chrome.runtime.onMessage 监听消息并作出相应处理。使用 chrome.extension.sendMessage 发送消息&#xff0c;然后在 back…

【小白推荐】安装OpenCV4.8 系统 Ubuntu 22.04LST Linux.

先看一下目录&#xff0c;知道大致的流程&#xff01; 文章目录 安装OpenCV安装依赖下载源码配置与构建安装 测试编写CMakeListx.txt编写测试代码 安装OpenCV 安装依赖 sudo apt update && sudo apt upgrade sudo apt install cmake ninja-build build-essential lib…

Linux驱动开发笔记(五):驱动连接用户层与内核层的文件操作集原理和Demo

若该文为原创文章&#xff0c;转载请注明原文出处 本文章博客地址&#xff1a;https://hpzwl.blog.csdn.net/article/details/134561660 红胖子网络科技博文大全&#xff1a;开发技术集合&#xff08;包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬…

TS版LangChain实战:基于文档的增强检索(RAG) | 京东云技术团队

LangChain LangChain是一个以 LLM &#xff08;大语言模型&#xff09;模型为核心的开发框架&#xff0c;LangChain的主要特性&#xff1a; 可以连接多种数据源&#xff0c;比如网页链接、本地PDF文件、向量数据库等允许语言模型与其环境交互封装了Model I/O&#xff08;输入…

UE4/UE5 雾

雾 UE4/UE5 雾平面雾材质效果图&#xff1a; 3D雾区材质效果图&#xff1a; UE4/UE5 雾 平面雾 做好将材质放在Plane上就行 材质 效果图&#xff1a; 3D雾区 做好将材质放在3D模型上就行 材质 效果图&#xff1a;