暴力解法:
思路:
假设子串 s' 长度 n' 为 i,从1到n/2遍历:
1. 如果 s 能够由他的子串重复构成,那么 s 的长度 n 一定整除其子串 s' 的长度 n',
2. 如果 s[:i] * n/n'==s,符合题意
class Solution(object):
def repeatedSubstringPattern(self, s):
n=len(s)
for i in range(1,n/2+1):
substr = s[:i]
if n%len(substr)==0:
if s[:i]*(n/len(substr))==s:
return True
return False
题解的两种方法一种是移动匹配,一种是KMP
移动匹配
上面是充分性的证明,必要性的证明看不明白。。。
class Solution:
def repeatedSubstringPattern(self, s: str) -> bool:
n = len(s)
if n <= 1:
return False
ss = s[1:] + s[:-1]
print(ss.find(s))
return ss.find(s) != -1