Given a string s, find the longest palindromic substring in s. You may assume that the maximum length of s is 1000.
Example 1:
Input: "babad" Output: "bab" Note: "aba" is also a valid answer.
Example 2:
Input: "cbbd" Output: "bb"
题目既寻找最长回文,根据题意可以看到,有12321和1221两种回文格式。
思路:从每一个位置向两边查找,需要判断是否越界以及ls和rs是否== (ls和rs即向两边扩展的位置标记。)
因为有两种回文格式,所以需要调用两次函数,一次是ls和rs都是当前位置,另外一次是ls和rs是当前位置和当前位置+1
class Solution:
def longestPalindrome(self, s: 'str') -> 'str':
if len(s) == 1:
return s
longestPalindromicString = ''
for i in range(0, len(s)):
tmpString = self.getPalindromicString(s, i, i) #寻找12321格式回文
if len(tmpString) > len(longestPalindromicString):
longestPalindromicString = tmpString[:]
tmpString = self.getPalindromicString(s, i, i+1) #寻找1221格式回文
if len(tmpString) > len(longestPalindromicString):
longestPalindromicString = tmpString[:]
return longestPalindromicString
def getPalindromicString(self, s, ls, rs): #此函数判断每个位置的回文
while(ls >= 0 and rs < len(s) and s[ls] == s[rs]):
ls -= 1
rs += 1
return s[ls+1:rs]