【20250211】字符串:459.重复的子字符串
#方法一:暴力求解法
# class Solution:
# def repeatedSubstringPattern(self, s):
# n = len(s)
# substr = ""
# #只重复一次不算“重复多次”
# if n <= 1:
# return False
# else:
# for i in range(1, n//2 + 1):
# #先获取子串,通过获取结束的位置,从而确定子串(因为开始位置可以确定为从头开始)
# #但是需要注意,切片是左开右闭的,因此i不是结束位置的下标,而是子串的长度
# #如果原字符串长度可以被当前子串长度整除,才有可能完全由这个子串重复构成
# if n % i == 0:
# substr = s[:i]
# #再判断这个子串能不能组成这个字符串
# if substr * (n//i) == s:
# return True
# return False
#方法二:移动匹配 这种方法代码随想录中给出了充分性和必要性的证明
# class Solution:
# def repeatedSubstringPattern(self,s):
# n = len(s)
# if n <= 1:
# return False
# #切片的基本形式是s[start:stop],start省略的话,则默认为0,stop省略的话,默认为字符串的长度,可以为负索引,-1表示倒数第一个索引(不包含倒数第一个)
# ss = s[1:] + s[:-1]
# print(ss.find(s))
# return ss.find(s) != -1
class Solution:
def repeatedSubstringPattern(self,s):
n=len(s)
if n<=1:
return False
else:
ss=s[1:]+s[:-1]
#这里要清楚find如果没有找到的话,返回值是-1
if ss.find(s)!=-1:
return True
else:
return False
#方法三:KMP