这个题啊,不难。最近写dp太少了,还是要好好复习复习。
好了,废话不多说,多写多看。
对了,从后天开始,要开始训练宝儿手撕代码了,那就从我写过的博客里挑吧,自己也好温习,hhh。
5. 最长回文子串
给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。
示例 1:
输入: "babad"
输出: "bab"
注意: "aba" 也是一个有效答案。
示例 2:
输入: "cbbd"
输出: "bb"
code:
class Solution(object):
def longestPalindrome(self, s):
"""
:type s: str
:rtype: str
"""
# DP
n = len(s)
if not n: return ''
dp = [[0]*(n) for _ in range(n)]
maxlen = s[0]
for i in range(n-1, -1, -1):
for j in range(n-1, i-1, -1):
if i==j:
dp[i][j] = 1
else:
if s[i] == s[j]:
if j==i+1:
dp[i][j] = 1
if j-i+1 > len(maxlen):
maxlen = s[i:j+1]
else:
if dp[i+1][j-1]:
dp[i][j] = dp[i+1][j-1]
if j-i+1 > len(maxlen):
maxlen = s[i:j+1]
return maxlen
haole.