当前位置: 首页 > article >正文

机试刷题_NC17 最长回文子串【python】

NC17 最长回文子串

在这里插入图片描述

动态规划思路
1.定义状态:
设 dp[i][j] 表示字符串 A 从第 i 个字符到第 j 个字符是否为回文子串。
如果是回文子串,dp[i][j] = True,否则为 False。

2.状态转移方程:
如果 A[i] == A[j],并且 dp[i+1][j-1] 为 True,那么 dp[i][j] = True。
即:dp[i][j] = (A[i] == A[j]) and dp[i+1][j-1]。

3.边界条件:
单个字符一定是回文子串,即 dp[i][i] = True。
两个字符时,如果 A[i] == A[j],则 dp[i][j] = True。

4.初始化:
初始化所有长度为 1 的子串为回文子串。
初始化所有长度为 2 的子串是否为回文子串。

5.填充 DP 表:
从长度为 3 开始,逐步填充 DP 表,直到长度为 n。

6.结果:
在填充 DP 表的过程中,记录最长的回文子串长度。

#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
# 
# @param A string字符串 
# @return int整型

class Solution:
    def getLongestPalindrome(self , A: str) -> int:
        # 动态规划
        n = len(A)
        if n<=1:
            return n

        dp = [[False]*n for i in range(n)]
        max_len = 1
        
        # 单个字符一定是回文子串
        for i in range(n): 
            dp[i][i] = True
        
        # 检查长度为2的子串
        for i in range(n-1): 
            if A[i]==A[i+1]:
                dp[i][i+1] = True
                max_len = 2

        # 检查长度大于2的子串
        for length in range(3,n+1): #子串长度从3到n
            for i in range(n-length+1): #子串起始位置
                j = i+length-1          #子串结束位置
                if A[i]==A[j] and dp[i+1][j-1]:
                    dp[i][j] = True
                    max_len = max(max_len,length)
        return max_len
        

http://www.kler.cn/a/562923.html

相关文章:

  • OpenAPI Generator:API开发的瑞士军刀
  • JavaEE 编写Java程序,实现简单的echo程序(网络编程TCP实践练习)
  • 解决Spring Boot中LocalDateTime返回前端数据为数组结构的问题
  • 欢乐力扣:最长连续序列
  • Flink SQL怎么用?
  • Android 10.0 Settings中系统菜单去掉备份二级菜单
  • 【字符串】最长公共前缀 最长回文子串
  • 2025最新Flask学习笔记(对照Django做解析)
  • windows设置暂停更新时长
  • 【多模态大模型】GLM-4-Voice端到端语音交互机器人VoiceAI
  • Ubuntu本地使用AnythingLLM
  • 【解决idea2024.3.3版本Vue插件报错】
  • 【新人系列】Python 入门专栏合集
  • 百度觉醒,李彦宏渴望光荣
  • 【Linux高级IO】掌握Linux高效编程:深入探索多路转接select机制
  • 3-提前结束训练
  • mac升级系统后聚焦Spotlight Search功能无法使用,进入安全模式可解
  • 【AIGC系列】3:Stable Diffusion模型介绍
  • 智慧物流小程序(论文源码调试讲解)
  • 最新版 (持续更新)docker 加速源 linux yum 源