思路1(易超时,不推荐):从输入字符串中截取子字符串a,先设定子字符串a长度等于输入字符串A的长度L,判断a若对称,返回结果为L;若a不对称,截取所有长度为L-1的子字符串:a1、a2,若a1、a2有一个对称,返回结果为L-1;若a1、a2均不对称,截取所有长度为L-2的子字符串:a1、a2、a3,若a1、a2、a3种有一个对称,返回结果为L-2;以此类推,可以找出最长的对称子字符串。由于需要两层循环嵌套,时间复杂度为:(n^2)/2
str1 = input() n = len(str1) l = 0 for i in range(n, 2, -1): for j in range(n-i+1): temp = str1[j:j+i] if temp == temp[::-1]: l = i break if l > 0: print(l) break思路2:遍历输入字符串A,找到所有的最短对称子字符串(形式如:'AA'、'A*A')及其位置,对每一个子字符串 a,向两侧逐步扩展,直至不再对称,得到字符串 a' (a' 包含 a),记录 a' 的长度。如此就能找到输入字符串A中所有的对称子字符串,返回其中长度最大的子字符串的长度即可。时间复杂度:n
# 从最短对称子字符串两侧扩展,计算最大长度 def get_max_length(i, j): l = j - i + 1 m = min(i, n-j-1) for k in range(1, m+1): if str1[i-k] == str1[j+k]: l += 2 else: break return l str1 = input() n = len(str1) result = [] # 找到所有最短的对称子字符串 for i in range(n-1): if str1[i] == str1[i+1]: l = get_max_length(i, i+1) result.append(l) if i < (n-2) and str1[i] == str1[i+2]: l = get_max_length(i, i+2) result.append(l) print(max(result))