首页 > 编程语言 >代码随想训练营第五十七天(Python)| 647. 回文子串、516.最长回文子序列

代码随想训练营第五十七天(Python)| 647. 回文子串、516.最长回文子序列

时间:2023-12-06 15:13:46浏览次数:38  
标签:Python res self len range 第五十七 dp 回文

647. 回文子串
1、中心扩散法+双指针

class Solution:
    def countSubstrings(self, s: str) -> int:
        res = 0
        for i in range(len(s)):
            # 以 i 为中心
            res += self.countPalind(i, i, s, len(s))
            # 以 i 和 i+1 为中心
            res += self.countPalind(i, i+1, s, len(s))
        return res

    def countPalind(self, i, j, s, n):
        ret = 0
        while i >= 0 and j < n and s[i] == s[j]:
            ret += 1
            i -= 1
            j += 1
        return ret

2、动态规划

class Solution:
    def countSubstrings(self, s: str) -> int:
        # dp 数组代表 i 到 j 区间的字符串是否是回文串
        dp = [[False] * (len(s)) for _ in range(len(s))]

        res = 0
        
        for i in range(len(s) - 1, -1, -1):
            for j in range(i, len(s)):
                if s[i] == s[j]:
                    if j - i <= 1:
                        dp[i][j] = True
                        res += 1
                    elif dp[i+1][j-1] is True:
                        dp[i][j] = True
                        res += 1
        
        return res

516.最长回文子序列

class Solution:
    def longestPalindromeSubseq(self, s: str) -> int:
        # dp 数组代表 s 字符串在 i 至 j 间的最大回文子序列为 dp[i][j]
        dp = [[0] * len(s) for _ in range(len(s))]
        # 初始化
        for i in range(len(s)):
            dp[i][i] = 1

        for i in range(len(s) - 1, -1, -1):
            for j in range(i+1, len(s)):
                if s[i] == s[j]:
                    dp[i][j] = dp[i+1][j-1] + 2
                else:
                    dp[i][j] = max(dp[i+1][j], dp[i][j-1])

        return dp[0][-1]

标签:Python,res,self,len,range,第五十七,dp,回文
From: https://www.cnblogs.com/yixff/p/17877793.html

相关文章

  • 【Python 千题 —— 基础篇】取余计算
    题目描述题目描述编写一个程序,接受用户输入的两个数字,然后计算这两个数字取余后的结果,并输出结果。输入描述输入两个数字,用回车隔开两个数字。输出描述程序将计算这两个数字取余后的结果,并输出结果。示例示例①73输出:1.0代码讲解下面是本题的代码:#描述:编写一个程序,接受用户输......
  • 【Python 千题 —— 基础篇】成绩评级
    题目描述题目描述期末考试结束,请根据同学的分数为该同学评级。A:90~100B:80~89C:70~79D:60~69E:0~60输入描述输入同学的分数。输出描述输出该同学的等级。示例示例①输入:79输出:同学的等级是:C代码讲解下面是本题的代码:#描述:期末考试结束,请根据同学的分数为该同学评级。#A......
  • python 协程
    python:用@asyncio.coroutine装饰器生成的对象是一个生成器对象但不是协程对象        用async定义的函数对象不是一个生成器,但是一个协程对象 importasynciofromcollections.abcimportCoroutine,[email protected]():print('......
  • Python学习前准备之MarkDown语法基础
    MarkDown基础语法[一]Typora(1)下载官网:Typora官方中文站(typoraio.cn)正版价格及介绍:89元/3台设备;89元三个设备码(重装系统设备码失效)绿色版:网盘链接[.\Typora\resources文件夹下替换(app.asar)](2)部分设置主题更改:Typora官方主题库下载完成后,解压压缩包后将.css......
  • Python基础之计算机基础
    计算机基础【一】计算机组成原理(1)什么是计算机?计算机是一种通电的智能设备,被称为电脑,拥有处理数据、执行指令的能力,是现代科技和信息社会的重要工具电脑又可以理解为通电的大脑电脑二字蕴含了人类对计算机的终极期望,希望它能真的像人脑一样去工作,实现自动化,提高工作效率,解......
  • Python学习前准备之Python环境安装和Pycharm使用
    【一】python解释器安装【1】Python官网https://www.python.org【2】Python各版本解释器官网https://www.python.org/downloads/【二】Windows系统安装Python解释器【1】下载Python版本解释器现在已经更新到了3.13版本的Python解释器,但是最新的解释器往往都会存在一......
  • Python基础之编程语言
    【引】编程语言和编程(1)什么是语言?语言是“人”与“人”之间沟通交流、传递信息的媒介,例如:汉语、英语,小蜜蜂翅膀的震动,猿猴的吼叫等(2)什么是编程语言?编程语言就是人类与计算机沟通交流的媒介(3)什么是编程?编程是指将人类思维逻辑翻译成计算机能够理解和执行的指令,将这些指......
  • Python特殊机制之垃圾回收机制
    垃圾回收机制【1】参考博客:【5.0】Python基础之垃圾回收机制-Chimengmeng-博客园(cnblogs.com)【2】博客摘要垃圾回收机制作为python解释器自带的一种功能,其目的在于帮助系统更好的管理内存,提高程序的运行效率垃圾回收机制,用来回收不可用的变量值所占用的内存空间(在......
  • Python基础之流程控制
    流程控制【1】流程控制语句介绍程序是由语句构成,而流程控制语句是用来控制程序中每条语句执行顺序的语句。【2】顺序结构顺序结构是指按照代码书写的顺序,一条语句接着一条语句执行,没有跳过、重复或其他特殊的结构。【3】分支结构(1)单分支结构(if)if+条件1:换行......
  • Python基础之Python基本构成
    【一】注释语法【1】什么是注释注释就是就是对代码的解释说明,注释的内容不会被当作代码运行【2】为什么要注释增强代码的可读性【3】如何使用注释代码注释分单行和多行注释1、单行注释用#号,可以跟在代码的正上方或者正后方#这是一段通过“#+注释内容”创造的注......