问题
https://www.nowcoder.com/questionTerminal/7615ed51b7b94b9eadf0776146b4e23c
给定一个仅由小写字母组成且长度不超过
1
0
6
10^6
106 的字符串,将首字符移到末尾并记录所得的字符串,不断重复该操作,虽然记录了无限个字符串,但其中不同字符串的数目却是有限的,那么一共记录了多少个不同的字符串?
输入样例:
abab
输入样例:
2
解决
kmp找循环节,首先构造next数组,然后判断有没有循环节,有循环节则输出循环节长度,否则字符串有多长就有多少。
python实现
s = input()
l = len(s)
nxt = [0] * (l+1)
nxt[0] = -1
i, j = 0, -1
while i < l:
if j == -1 or s[i] == s[j]:
i += 1
j += 1
nxt[i] = j
else:
j = nxt[j]
# 判断循环节
if l % (l-nxt[l]) == 0 and nxt[l] != 0 :
print(l-nxt[l])
else:
print(l)