一个重复字符串是由两个相同的字符串首尾拼接而成,例如abcabc便是长度为6的一个重复字符串,而abcba则不存在重复字符串。 给定任意字符串,请找出其中的最长重复子串。
输入描述:
输入一个字符串s,其中s长度小于1e4而且只包含数字和字母。
输出描述:
输出一个整数,表示s的最长重复子串长度,若不存在则输出0
输入例子1:
xabcabcx
输出例子1:
6
def getMaxRepeatSubstringLength(inputStr
):
length
= len(inputStr
)
for i
in reversed(range(length
//2)):
count
= 0
for j
in range(length
- i
):
if inputStr
[j
] == inputStr
[j
+i
]:
count
= count
+ 1
else:
if length
- j
<= 2 * i
:
break
count
= 0
if count
== i
:
return count
* 2
return 0
inputStr
= input()
print(getMaxRepeatSubstringLength
(inputStr
))
1.先假设最长重复子串的长度为i 2.判断长度为i的假设成立不成立 3.最长重复子串是不可能超过,总长度的一半的 4.判断假设是不是成立的过程中如果发现剩余待判断的长度小于2*i了,假设肯定是不成立的 5.既然是最长子串的判断,那么i从大往小假设是合理的,一旦符合就可以直接退出。反之从小到大假设是需要校验所有的情况的。