给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为1000。
示例 1:
输入: "babad" 输出: "bab" 注意: "aba"也是一个有效答案。
示例 2:
输入: "cbbd" 输出: "bb"
思路:回串分成两种:以“aba”这种形式和“abba”这种形式。
那么分两种情况设置两个索引。
第一种:i = value-1,j = value + 1
第二种:i = value,j = value + 1
从中心开始往两边延伸,如果s[i] 等于 s[j] ,那么i向左移,j像右移,直到边界。另外新建ans字符串,初始为s[0], 若之后找到比ans更长的回串,那么更新ans
1 class Solution: 2 def longestPalindrome(self, s): 3 """ 4 :type s: str 5 :rtype: str 6 """ 7 ls = list(s) 8 ans = s[0:1] 9 for value in range(len(ls)): # 分两种情况,第一种是bab这种回串 10 i = value - 1 11 j = value + 1 12 while i >= 0 and j <= (len(ls)-1): 13 if s[i] == s[j]: 14 i -= 1 15 j += 1 16 else: 17 break 18 if len(s[i+1:j]) >= len(ans): 19 ans = s[i+1:j] 20 for value in range(len(ls)): # 第二种是baab这种回串 21 i = value 22 j = value + 1 23 while i >= 0 and j <= (len(ls)-1): 24 if s[i] == s[j]: 25 i -= 1 26 j += 1 27 else: 28 break 29 if len(s[i+1:j]) >= len(ans): 30 ans = s[i+1:j] 31 return ans 32 33 solution = Solution() 34 print(solution.longestPalindrome('abbad'))