力扣每日一题:5.最长回文子串 回文场景判断的中心扩散法!

简介: 力扣每日一题:5.最长回文子串 回文场景判断的中心扩散法!

5.最长回文子串


https://leetcode-cn.com/problems/longest-palindromic-substring/solution/5zui-chang-hui-wen-zi-chuan-hui-wen-chan-z3yj/

难度:中等


题目:

给你一个字符串 s,找到 s 中最长的回文子串。


示例:

示例 1:
输入:s = "babad"
输出:"bab"
解释:"aba" 同样是符合题意的答案。
示例 2:
输入:s = "cbbd"
输出:"bb"
示例 3:
输入:s = "a"
输出:"a"
示例 4:
输入:s = "ac"
输出:"a"


分析

这道题看似麻烦,但仔细考虑回文子串只有两种情况:

  1. 奇数回文,即 aba
  2. 偶数回文,即 abba

那么我们只需要循环字符串的每一个index,当满足一下条件时,从中心向两边扩展:

  1. left >= 0
  2. right < len(s)
  3. s[left] == s[right]
    对于第三个条件,存在奇数回文和偶数回文的判断:
  • 奇数回文时,我们初始left == right
  • 偶数回文时,我们初始化right == left + 1

根据这两种情况进行遍历,最终即可获取结果。具体代码如下。


解题:

class Solution:
    def longestPalindrome(self, s):
        ln = len(s)
        # s为空或者s为自己本身的情况
        if ln < 2:
            return s
        ret = ''
        def finder(left, right):
            nonlocal ret
            while left >= 0 and right < ln and s[left] == s[right]:
                left -= 1
                right += 1
            ret = s[left + 1:right] if right - left - 1 > len(ret) else ret
        for i in range(ln ):
            finder(i, i)
            finder(i, i + 1)
        return ret




相关文章
|
1月前
Leetcode第五题(最长回文子串)
这篇文章介绍了解决LeetCode第五题“最长回文子串”问题的一种方法,使用了中心扩展法来寻找给定字符串中的最长回文子串。
34 0
|
6月前
|
算法
LeetCode算法题---最长回文子串、N 字形变换(四)
LeetCode算法题---最长回文子串、N 字形变换(四)
42 0
|
6月前
|
Go
golang力扣leetcode 479.最大回文数乘积
golang力扣leetcode 479.最大回文数乘积
41 0
LeetCode | 234. 回文链表
LeetCode | 234. 回文链表
|
3月前
|
Python
【Leetcode刷题Python】5. 最长回文子串
LeetCode 5题 "最长回文子串" 的Python解决方案,使用动态规划算法找出给定字符串中的最长回文子串。
46 3
|
3月前
|
算法
LeetCode第5题最长回文子串
该文章介绍了 LeetCode 第 5 题最长回文子串的解法,通过分析回文子串的特点,使用动态规划的思想,用二维数组记录字符串是否为回文串,从后往前遍历找子串,减少重复判断,最终找到最长回文子串,并总结了解题时通过举例推导找规律的思路。
LeetCode第5题最长回文子串
|
3月前
|
Python
【Leetcode刷题Python】234.回文链表
两种判断链表是否为回文的方法:使用栈和拆分为两个链表后反转对比,并给出了相应的Python代码实现。
24 0
|
5月前
|
存储 算法 Java
【经典算法】LeetCode 5: 最长回文子串(Java/C/Python3实现含注释说明,Medium)
【经典算法】LeetCode 5: 最长回文子串(Java/C/Python3实现含注释说明,Medium)
63 2
|
6月前
leetcode-5:最长回文子串
leetcode-5:最长回文子串
48 0
|
6月前
leetcode代码记录(最长回文子串
leetcode代码记录(最长回文子串
46 2