我的博客

leetcode 5. 最长回文子串 python

目录
  1. 解答

给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。

示例 1:

输入: “babad”
输出: “bab”
注意: “aba” 也是一个有效答案。
示例 2:

输入: “cbbd”
输出: “bb”

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/longest-palindromic-substring
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

解答

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
class Solution:
def longestPalindrome(self, s: str) -> str:
l = len(s)
if l <= 1: return s
dp = [[False for i in range(l)] for i in range(l)]
for i in range(l):
dp[i][i] = True
max_s = 1
for i in range(l-1):
if s[i] == s[i+1]:
dp[i][i+1] = True
max_s = 2
cur_s = 0
while cur_s < l - 2:
j = 1
while j + cur_s + 1 < l:
if dp[j][j+cur_s]:
if s[j-1] == s[j+cur_s+1]:
dp[j-1][j+cur_s+1] = True
max_s = cur_s + 3
j += 1
cur_s += 1
for i in range(l):
if dp[i][i+max_s-1]:
return s[i:i+max_s]

评论无需登录,可以匿名,欢迎评论!