在PAT超时了两个测试点的代码:
以下代码相当于$O(n^3)$的时间复杂度,因为切片操作是$O(n)$的时间复杂度
s = input()
length = len(s)
for i in range(length,0,-1):# 枚举长度
for start in range(0,length):# 枚举起点
if start + i > length:
break
substr = s[start:start + i]
if substr == substr[::-1]:
print(i)
exit(0)
方法二:中心点扩散,$O(n)$的时间复杂度
两种情况:一种是字符串长度为奇数,如:aba。另外一种是字符串长度为偶数,如abba
s = input()
length = len(s)
res = 0
for i in range(length):# 枚举中心点
# 回文子串的长度为奇数的情况
l = i - 1;r = i + 1
while l >= 0 and r < length and s[l] == s[r]:
l -= 1
r += 1
res = max(res,r - l + 1 - 2)
# 回文子串的长度为偶数的情况
l = i;r = i + 1
while l >= 0 and r < length and s[l] == s[r]:
l -= 1
r += 1
res = max(res,r - l + 1 - 2)
print(res)