标签:code 经典的 etc ali style span class == sub
给定一个字符串 s
,找到 s
中最长的回文子串。你可以假设 s
的最大长度为 1000。
示例 1:
输入: "babad" 输出: "bab" 注意: "aba" 也是一个有效答案。
示例 2:
输入: "cbbd" 输出: "bb"
比较经典的问题,寻找最长回文子串。Leetcode里提供了多种解法。我采用最直观的解法:中心扩展法。
思路是每次以当前元素为中心向两边扩展,直到遇到不同元素,此时找到一个子串。有两点需要注意的地方:
1)空串和单字符都是回文,直接返回即可。
2)偶数回文和奇数回文的情况。例如:abace是aba的奇数串,以b为中心向两周扩展即可。但是abbawe是偶数串abba,这样需要以bb为指针向两周同时往外扩展。
1 class Solution: 2 def longestPalindrome(self, s: str) -> str: 3 if len(s)<=1: return s 4 temp = "" 5 for i in range(len(s)-1): # i为当前元素 6 j = k = i # 奇数回文串情况 7 while(k>=0) and(j<len(s)) and (s[k]==s[j]): 8 k,j= k-1,j+1 # 奇数回文串,所以k j指针指向i两边的元素 9 if k==j: 10 temp1 = s[k] 11 else: 12 temp1 = s[k+1:j] 13 temp = temp1 if len(temp1)>len(temp) else temp 14 15 if (s[i]==s[i+1]): # 偶数回文串 16 k,j = i,i+1 # k j指向i和i的下个元素 17 while(k>=0) and(j<len(s)) and (s[k]==s[j]): 18 k,j= k-1,j+1 19 if k==j: 20 temp1 = s[k] 21 else: 22 temp1 = s[k+1:j] 23 temp = temp1 if len(temp1)>len(temp) else temp 24 25 return temp
5. Longest Palindromic Substring
标签:code 经典的 etc ali style span class == sub
原文地址:https://www.cnblogs.com/king-lps/p/10676969.html