题解 | #最长回文子串#
最长回文子串
https://www.nowcoder.com/practice/12e081cd10ee4794a2bd70c7d68f5507
# 最长回文子串
# 穷举
while True:
try:
s = input()
res = []
for i in range(len(s)):
for j in range(i+1, len(s)+1):
if s[i:j] == s[i:j][::-1]:
res.append(j-i)
if res != '':
print(max(res))
except:
break
# 动态规划,不太懂
def longestPalindrome(s):
n = len(s)
dp = [[False] * n for _ in range(n)] # 初始化dp数组
ans = "" # 存储最长回文子串
for l in range(1, n + 1): # 遍历所有长度
for i in range(n - l + 1): # 遍历所有起始位置
j = i + l - 1 # 计算结束位置
if l == 1: # 长度为1的子串一定是回文串
dp[i][j] = True
elif l == 2: # 长度为2的子串需要判断两个字符是否相等
dp[i][j] = (s[i] == s[j])
else: # 长度大于2的子串需要判断两端字符是否相等并且内部子串是否是回文串
dp[i][j] = (s[i] == s[j]) and dp[i + 1][j - 1]
if dp[i][j] and l > len(ans): # 如果找到了更长的回文子串,就更新答案
ans = s[i:j + 1]
print(len(ans))
longestPalindrome(input())
查看12道真题和解析