题目:(重复的子字符串)给定一个非空的字符串,判断它是否可以由它的一个子串重复多次构成。给定的字符串只含有小写英文字母,并且长度不超过10000。
示例 1:
输入: “abab”
输出: True
解释: 可由子字符串 “ab” 重复两次构成。
示例 2:输入: “aba”
输出: False
示例 3:输入: “abcabcabcabc”
输出: True
解释: 可由子字符串 “abc” 重复四次构成。 (或者子字符串 “abcabc” 重复两次构成。)
程序说明:
刚开始我想到的是将字符串转换为列表,并对其去重,然后将去重后的列表乘于相关的长度,若得到的新列表与原来的列表中的元素都相等,则返回True,但是后面很明显,程序超时了,发生错误(代码如下)。
最后我还是决定使用字符串的切分来完成此题。
全部代码:
class Solution:
def repeatedSubstringPattern(self, s: str) -> bool:
n = len(s)
a = n // 2
while a > 0:
if n % a == 0:
num = n // a
if s == s[:a] * num:
return True
a -= 1
return False
错误代码:
class Solution:
def repeatedSubstringPattern(self, s: str) -> bool:
if len(s)==1:
return False
li=list(s)
num=list(set(li))
num.sort()
x=len(li)//len(num)
if num*x==li:
return True
return False
题目来源:力扣(LeetCode)