题解 | #最长回文子串#

最长回文子串

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())

全部评论

相关推荐

头像
2025-12-23 12:56
英特尔_Software_engineer
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务