目录
1.题目描述
2.题目求解
方法一:枚举
方法二:字符串匹配
方法三:另辟蹊径
1.题目描述
给定一个非空的字符串 s
,检查是否可以通过由它的一个子串重复多次构成。
示例 1:
输入: s = "abab" 输出: true 解释: 可由子串 "ab" 重复两次构成。
示例 2:
输入: s = "aba" 输出: false
示例 3:
输入: s = "abcabcabcabc" 输出: true 解释: 可由子串 "abc" 重复四次构成。 (或子串 "abcabc" 重复两次构成。)
提示:
1 <= s.length <= 104
-
s
由小写英文字母组成
2.题目求解
先看一下官方给的两种解法:
方法一:枚举
代码:
class Solution:
def repeatedSubstringPattern(self, s: str) -> bool:
n = len(s)
for i in range(1, n // 2 + 1):
if n % i == 0:
if all(s[j] == s[j - i] for j in range(i, n)):
return True
return False
方法二:字符串匹配
代码:
class Solution:
def repeatedSubstringPattern(self, s: str) -> bool:
return (s + s).find(s, 1) != len(s)
最后再看一位老哥的方法,另辟蹊径,真的nb!
方法三:另辟蹊径
如果s不包含重复子串,那么s自己就是一次重复的子串,那么把s + s去头去尾中就一定不包含s自己。文章来源:https://www.toymoban.com/news/detail-790746.html
如果s包含重复子串,那么在s + s去头去尾中就一定能找到s自己。文章来源地址https://www.toymoban.com/news/detail-790746.html
class Solution:
def repeatedSubstringPattern(self, s: str) -> bool:
return True if s in (s + s)[1:-1] else False
到了这里,关于重复的子字符串的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!