【id】#5
【title】 Longest Palindromic Substring
【description】
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”
【idea】
回文串就是反过来跟原串相同的字符串。
- 中心扩展算法
以每个字符为中心,向左右扩展,如果左右的字符相同,则是回文串,如bab;如果是偶数个,中心字符就是两个一样的字符,如baab。
【code】
# 中心扩展法
class Solution:
def longestPalindrome(self, s):
"""
:type s: str
:rtype: str
"""
max_len = 0
res = ''
for i in range(len(s)):
# 奇数情况,中心数开始
tmp = self.getPalindrom(s,i,i)
if len(tmp) > len(res):
res = tmp
tmp = self.getPalindrom(s,i,i+1)
if len(tmp) > len(res):
res = tmp
return res
def getPalindrom(self,s,left,right):
while left >= 0 and right <len(s) and s[left]==s[right]:
left -= 1
right += 1
return s[left+1: right]
还有马拉车算法,DP算法等,后续补充。