一个重复字符串是由两个相同的字符串首尾拼接而成,例如abcabc便是长度为6的一个重复字符串,而abcba则不存在重复字符串。 给定任意字符串,请帮小强找出其中的最长重复子串。

tech2026-04-14  2

一个重复字符串是由两个相同的字符串首尾拼接而成,例如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从大往小假设是合理的,一旦符合就可以直接退出。反之从小到大假设是需要校验所有的情况的。

最新回复(0)