459. Repeated Substring Pattern
难度:Easy
- 判断一个长度 的字符串是否有完整循环节
- 算法一:暴力枚举。时间复杂度 ,其中 为 n 的约数个数。
- 算法二:KMP,只需判定是否有 即可,时间复杂度 。至于为什么不用再检查更短的 border,笔者下午想了一下,证明可见图中所示:
是的,线性做法被暴力给吊打了😅。感觉可能跟 Python 的内存访问效率有关。
class Solution:
def repeatedSubstringPattern(self, s: str) -> bool:
n = len(s)
for i in range(1, n):
if n % i != 0:
continue
j = i
flag = True
while j < n:
if s[0:i] != s[j:j+i]:
flag = False
break
j += i
if flag:
return True
return False
'''n = len(s)
nxt = [0]*(n+1)
j = 0
for i in range(1, n):
while j and s[j] != s[i]:
j = nxt[j]
if s[j] == s[i]:
j += 1
nxt[i+1] = j
return nxt[n] and n % (n-nxt[n]) == 0'''