Given a string s, find the longest palindromic substring in s. You may assume that the maximum length of s is 1000.
Example:
Input: “babad”
Output: “bab”
Note: “aba” is also a valid answer.
Example:
Input: “cbbd”
Output: “bb”
这个问题类似于最长子串的问题,都是在一个字符串中找出符合一定有要求的最长子串,开始我也像考虑第三题一样的考虑这个问题,打算用一个指针记录子串头,一个长度标记位,一个字符串记录候选结果。但是发现这样做不好判断哪些是回文字符串,即使一个字符串内部回文匹配失败了,它也仍可能是一个大的回文串的左边一部分。所以我就看了一些其他人的思路。发现有一种解法非常的直观:
class Solution(object):
def longestPalindrome(self, s):
"""
:type s: str
:rtype: str
"""
ans = ""
for i in range(len(s)):
tmp = self.find(s,i,i)
if len(tmp) > len(ans):
ans = tmp
tmp = self.find(s,i,i+1)
if len(tmp) > len(ans):
ans = tmp
return ans
def find(self,s,i,j):
while i >= 0 and j < len(s) and s[i] == s[j]:
i -= 1; j+=1
return s[i+1:j]
find函数负责判断最长回文串,从i,j开始往两端延伸,找出最长的回文串。tmp = self.find(s,i,i)用于判断”aba”的情况,这时是s[i] = b;tmp = self.find(s,i,i+1)用于判断”abba”的情况,这时是s[i] = s[i+1] = b。这个方法很容易理解,同时find函数的使用非常的巧妙。