方法一:::::
###重复的子字符串,思路:暴力法,遍历字符串的长度。然后使用滑动窗口的思想,
# 思考一下,字符串特点,如果一个子字符串重复构成一个字符串,那这个子字符串的长度一定能被字符串长度整除
#多次重复构成,子字符串长度不能超过字符串长度一半,子字符串长度最大长度是字符串长度的一半
#基于限制条件,优化暴力法
def repeatedSubstringPattern(s):
possiblelen=[] ##建立一个list,用于放置子字符串可能的长度
n=len(s) ###计算字符串长度
for i in range (1,n//2+1): ###计算子字符串可能的长度,因为是长度,所以i开始值是1,i的最大值是字符串长度的一半
if n%i==0: ###能被整除,就是子字符串长度的取值
possiblelen.append(i) ###存放置list中
for i in possiblelen: ###已知子字符串长度,使用滑动窗口思想,遍历list所有取值
base=s[:i] ###子字符串
for j in range(n-i+1): ###滑动窗口思想,滑动范围是 字符串长度减去子字符串长度
if s[j:j+i]!=base:
break
if j==n-i:
return True
return False
print(repeatedSubstringPattern("aba"))
方法二:
官方的做法,看不懂,有看懂的可以解释一下,谢谢
###切片是是个左闭右开的取值。闭是能取到那个值,开是不能取到那个值 ##### !=-1表明包含此字符串。若是==-1,则表明不包含字符串
###目前的理解就是 将字符串duble一下,掐头去尾 还能找到原字符串,则这个原字符串就是符合条件,由一个子字符串重复组成的
def repeatedSubstringPattern(s): return (s+s)[1:len(s)*2-1].find(s)!=-1 print(repeatedSubstringPattern("abcab"))