leetcode5:最长回文子串

给定一个字符串 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'))

猜你喜欢

转载自www.cnblogs.com/gaowanru/p/9229662.html