首页 > 编程语言 >Leetcode刷题5--- 最长回文子串 Python

Leetcode刷题5--- 最长回文子串 Python

时间:2024-11-24 19:32:40浏览次数:9  
标签:子串 right Python max --- length left Leetcode 回文

Leetcode刷题5— 最长回文子串 Python

问题描述

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


示例

示例 1:
“”"
输入: s = “babad”
输出: “bab”
解释: “aba” 同样是符合题意的答案。
“”"

示例 2:
“”"
输入: s = “cbbd”
输出: “bb”
“”"


提示

  • 1 ≤ s . l e n g t h ≤ 1000 1 \leq s.length \leq 1000 1≤s.length≤1000
  • s 仅由数字和英文字母组成。

方法一:动态规划

思路

  1. 定义 dp[i][j] 表示字符串 s 的子串 s[i:j] 是否是回文子串。
  2. 状态转移方程:
    • 如果 s[i] == s[j]j - i <= 2,则 dp[i][j] = true
    • 如果 s[i] == s[j]j - i > 2,则 dp[i][j] = dp[i+1][j-1]
  3. 遍历所有子串,记录最长的回文子串。

代码实现

def longestPalindrome(s: str) -> str:
    n = len(s)
    if n < 2:
        return s

    dp = [[False] * n for _ in range(n)]
    start, max_length = 0, 0

    for j in range(n):
        for i in range(j + 1):
            if s[i] == s[j] and (j - i <= 2 or dp[i + 1][j - 1]):
                dp[i][j] = True
                if j - i + 1 > max_length:
                    start = i
                    max_length = j - i + 1

    return s[start:start + max_length]

方法二:中心扩展法

思路

  1. 回文串的中心有两种情况:
    • 单个字符为中心;
    • 两个字符之间为中心。
  2. 从每个可能的中心向外扩展,找到最大长度的回文子串。

代码实现

def longestPalindrome(s: str) -> str:
    def expand_around_center(left: int, right: int) -> str:
        while left >= 0 and right < len(s) and s[left] == s[right]:
            left -= 1
            right += 1
        return s[left + 1:right]

    max_palindrome = ""
    for i in range(len(s)):
        # 单中心扩展
        palindrome1 = expand_around_center(i, i)
        # 双中心扩展
        palindrome2 = expand_around_center(i, i + 1)
        # 更新最长回文子串
        max_palindrome = max(max_palindrome, palindrome1, palindrome2, key=len)

    return max_palindrome
"""

标签:子串,right,Python,max,---,length,left,Leetcode,回文
From: https://blog.csdn.net/PeterClerk/article/details/144011809

相关文章

  • 深度学习入门- 梯度(Gradient)(一)
    目录一.梯度的数学基础1.复合函数2.链式法则3.驻点,极值点,鞍点4.偏导数5.梯度6. 梯度法一.梯度的数学基础1.复合函数    由多个函数构成的函数,比如z=(x+y)**2,由函数1: z=t**2和函数2: t=x+y构成。2.链式法则    如果某个函数由复合函数表示,则该复......
  • 解决python中输出输出路径包含中文字符
    提问如何解决python中输出输出路径包含中文字符的问题。解答如果需要将包含中文的文件路径转换为非中文路径(例如,使用英文或者无意义的数字/字母组合代替),你可以考虑实现一个简单的映射逻辑或者编码方式来代替原有的中文名称。这里提供一个简单的示例,使用哈希函数对中文路......
  • Pulsar 入门实战(6)--Rest API
    RestAPI是broker提供的关联API,JavaadminAPI和pulsar-adminCLI底层都是使用的RestAPI;本文主要介绍其基本使用,文中所使用到的软件版本:Pulsar3.3.0。1、Admin1.1、BOOKIES1.1.1、列出所有bookiecurlhttp://10.49.196.30:8080/admin/v2/bookies/all1.2、BROKER......
  • Font-awesome失效恢复
    Font-awesome失效恢复策略可能的原因有:1.用了收费pro的版本,没充钱。FontAwesome6字体分为Free和Pro两个版本。FontAwesome6Free字体是免费版,可以自由使用;FontAwesome6Pro字体是收费版,需要付费才能使用。2.链接失效,需要更新。比方说你原来库引用的是4.7版本的(......
  • 华为技术岗位笔试&面试题汇总-第二篇
    说在前面本篇文章是华为技术岗位笔试&面试题,第二篇。后续将持续推出互联网大厂,如阿里,腾讯,百度,美团,头条等技术面试题目,以及答案,专家出题人分析汇总。欢迎大家点赞关注转发。题目1:冒泡排序算法的时间复杂度是什么?参考答案:时间复杂度是O(n^2)。题目2:Internet采用哪种网络协议......
  • ubuntu切换python默认版本
    1.检查当前Python版本首先,查看系统中已安装的Python版本:python--versionpython3--versionls/usr/bin/python*你应该会看到多个Python版本,如python2.x或python3.x。2.使用update-alternatives工具Ubuntu推荐使用update-alternatives来管理和切换默......
  • Metasploit Pro 4.22.5-2024111401 发布下载,新增功能概览
    MetasploitPro4.22.5-2024111401发布下载,新增功能概览MetasploitPro4.22.5-2024111401(Linux,Windows)-专业渗透测试框架Rapid7Penetrationtesting,releasedNov14,2024请访问原文链接:https://sysin.org/blog/metasploit-pro-4/查看最新版。原创作品,转载......
  • Dubbo源码解析-Dubbo的线程模型(九)
    一、Dubbo线程模型首先明确一个基本概念:IO线程和业务线程的区别IO线程:配置在netty连接点的用于处理网络数据的线程,主要处理编解码等直接与网络数据打交道的事件。业务线程:用于处理具体业务逻辑的线程,可以理解为自己在provider上写的代码所执行的线程环境。Dubbo默认......
  • Python内置数据结构:列表篇:【】,list函数创建。列表创建常见遇到问题,索引,列表增删改查,常
    介绍:列表元组字典集合列表: 方括号【】和list函数是列表最常用的两种定义方式。我们暂且称列表内的东西为元素,列表内的元素以逗号分隔开。列表的初始化:空列表,有数值是列表的两种初始化情况。使用方括号创建列表:【】a=[]#创建了一个空列表并将其赋值给了a我们可以称a为一......
  • Cellebrite UFED 4PC 7.69 (Windows) - Android 和 iOS 移动设备取证软件
    CellebriteUFED4PC7.69(Windows)-Android和iOS移动设备取证软件TheIndustryStandardforLawfullyAccessingandCollectingDigitalData请访问原文链接:https://sysin.org/blog/cellebrite-ufed/查看最新版。原创作品,转载请保留出处。作者主页:sysin.orgC......