一、题目
题目链接:https://leetcode-cn.com/problems/longest-palindromic-substring/
给定一个字符串
s
,找到s
中最长的回文子串。你可以假设s
的最大长度为 1000。示例 1:
输入: "babad" 输出: "bab" 注意: "aba" 也是一个有效答案。示例 2:
输入: "cbbd" 输出: "bb"
二、分析及代码
分析:给一个字符串,让找出最长的回文子串,就是顺着和倒着看结果一样,暴力求解的话复杂度是O(N^3),我采用dp完成,dp是一个二维数组,dp[i][j]为1表示字符串第i个位置到第j个位置的字符串为回文字符串。然后通过长度就行遍历即可。代码如下:
class Solution: def longestPalindrome(self, s: str) -> str: n=len(s) dp=[[0 for i in range(n)] for j in range(n)] mi=0 mj=0 maxlen=1 for i in range(n-1): dp[i][i]=1 if s[i]==s[i+1]: dp[i][i+1]=1 mi=i mj=i+1 maxlen=2 if n>=1: dp[n-1][n-1]=1 for i in range(2,n): for j in range(n-i): if s[j]==s[j+i] and dp[j+1][j+i-1]==1: dp[j][j+i]=1 if i+1>maxlen: mi=j mj=j+i maxlen=i+1 print(mi,mj) return s[mi:mj+1]