# @lc code=start classSolution: deflongestPalindrome(self, s: str) -> str: n=len(s) dp=[[0for _ inrange(n)] for _ inrange(n)] for i inrange(n): dp[i][i]=1
max_len = 1 start=0 for i inrange(n-1, -1, -1): for j inrange(i+1, n): if s[i]==s[j]: if j-i<3: dp[i][j]=1 else: dp[i][j]=dp[i+1][j-1] else: dp[i][j]=0
if dp[i][j]: cur_len=j-i+1 if cur_len>max_len: max_len=cur_len start = i return s[start:start+max_len] # @lc code=end
classSolution: deflongestPalindrome(self, s: str) -> str: start, end = 0,0 defpalindrome(s, l, r): while l>=0and r<len(s) and s[l]==s[r]: l-=1 r+=1 return l+1, r-1
for i inrange(len(s)): # 找到以 s[i] 为中心的回文串 l1, r1=palindrome(s, i, i) # 找到以 s[i] 和 s[i+1] 为中心的回文串 l2, r2=palindrome(s, i, i+1) if (r1-l1)>(end-start): start, end = l1, r1 if (r2-l2)>(end-start): start, end = l2, r2 return s[start:end+1]