459. 重复的子字符串 - 力扣(LeetCode)
暴力解法:
思路:
假设子串 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 Truereturn False
题解的两种方法一种是移动匹配,一种是KMP
移动匹配
上面是充分性的证明,必要性的证明看不明白。。。
class Solution:def repeatedSubstringPattern(self, s: str) -> bool:n = len(s)if n <= 1:return Falsess = s[1:] + s[:-1] print(ss.find(s)) return ss.find(s) != -1