5. Longest Palindromic Substring
Posted king-lps
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了5. Longest Palindromic Substring相关的知识,希望对你有一定的参考价值。
1. 原始题目
给定一个字符串 s
,找到 s
中最长的回文子串。你可以假设 s
的最大长度为 1000。
示例 1:
输入: "babad" 输出: "bab" 注意: "aba" 也是一个有效答案。
示例 2:
输入: "cbbd" 输出: "bb"
2. 我的解法
比较经典的问题,寻找最长回文子串。Leetcode里提供了多种解法。我采用最直观的解法:中心扩展法。
思路是每次以当前元素为中心向两边扩展,直到遇到不同元素,此时找到一个子串。有两点需要注意的地方:
1)空串和单字符都是回文,直接返回即可。
2)偶数回文和奇数回文的情况。例如:abace是aba的奇数串,以b为中心向两周扩展即可。但是abbawe是偶数串abba,这样需要以bb为指针向两周同时往外扩展。
3. 解题
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的主要内容,如果未能解决你的问题,请参考以下文章
#Leetcode# 5. Longest Palindromic Substring
5. Longest Palindromic Substring - Unsolved
5. Longest Palindromic Substring
5. Longest Palindromic Substring