算法day57|647,516

news/2024/11/24 5:38:18/

目录

647. 回文子串

516.最长回文子序列

动态规划总结篇


647. 回文子串

dp数组的定义

dp[i][j]代表的是区间[i,j]的字串是否为回文字符,如果dp[i][j]为true,否则为false

递推公式

如果s[i]和s[j]相等的话

1.i==j

为同一个字符,dp[i][j] = True

2 i与j相差1

dp[i][j] = True

3.i与j相差大于1

看一下前面的区间是不是true

dp[i-1][j-1] == True

如果不相等,那么return false

初始化

dp[i][j]== False

遍历顺序

因为需要在相等的第三种情况,需要判断里面的区间是不是回文。但是如果从上往下,从左往右遍历的话,会直接使用dp[i+1][j-1]未初始化的情况。所以我们不能那么遍历,所以我们需要从下往上,从左往右遍历

 

class Solution:def countSubstrings(self, s: str) -> int:#dp数组的定义,dp[i][j]dp = [[False] * len(s) for _ in range(len(s))]#初始化result = 0#遍历顺序,从下往上,从左往右for i in range(len(s)-1,-1,-1):for j in range(i,len(s)):#如果相等if s[i] == s[j]:#i==jif i == j:result += 1dp[i][j] = Trueelif j-i == 1:result += 1dp[i][j] = Trueelse:if dp[i+1][j-1]:result += 1dp[i][j] = Truereturn result

代码随想录

516.最长回文子序列

dp数组的定义

dp[i][j]指的是字符串在[i,j]范围内最长回文子序列的长度是dp[i][j]

递归公式

如果s[i]和s[j]相同:

就要把长度+2,因为加入新的两个数

dp[i][j] = dp[i-1][j-1]+2

如果不相同:

那么把s[i]放进去

dp[i][j]= dp[i][j-1]

把s[j]放进去

dp[i][j]=  dp[i-1][j]

初始化

如果i==j的话,一定是等于1的

遍历顺序

从下到上,从左到右

打印dp

最后返回就看i,j区间内,最长的长度

647. 回文子串,求的是回文子串,而本题要求的是回文子序列, 大家要搞清楚两者之间的区别。

代码随想录

class Solution:def longestPalindromeSubseq(self, s: str) -> int:#dp数组的定义dp = [[0]*len(s) for _ in range(len(s))]for i in range(len(s)):dp[i][i] = 1for i in range(len(s)-1,-1,-1):for j in range(i+1,len(s)):#如果s[i]==s[j]的话if s[i]==s[j]:dp[i][j] = dp[i+1][j-1]+2else:dp[i][j] = max(dp[i+1][j],dp[i][j-1])return dp[0][-1]

动态规划总结篇

代码随想录


http://www.ppmy.cn/news/6203.html

相关文章

BUUCTF Misc [SUCTF2018]single dog 我吃三明治 sqltest [SWPU2019]你有没有好好看网课?

[SUCTF2018]single dog 下载文件 使用kali的binwalk工具分析 进行文件分离 解压其中的压缩包,得到1.txt 看内容应该是js加密后的结果,复制到AAEncode在线解密网站 得到flag flag{happy double eleven} 我吃三明治 下载文件 使用010 eito…

AcWing第 81 场周赛

第k个数 给定一个长度为 nn 的整数数列 a1,a2,…,ana1,a2,…,an,以及一个整数 kk。 请你计算并输出该数列从大到小排序后的第 kk 个数。 输入格式 第一行包含两个整数 n,kn,k。 第二行包含 nn 个整数 a1,a2,…,ana1,a2,…,an。 输出格式 一个整数&#xff0c…

Android设计模式详解之解释器模式

前言 解释器模式是一种使用较少的行为型模式; 提供了一种解释语言的语法或表达式的方式,通过该接口解释一个特定的上下文。 定义:给定一个语言,定义它的文法的一种表示,并定义一个解释器,该解释器使用该表…

54 线程最外层异常的处理

前言 之前在 kafka 消费者客户端的一个 case 中曾经看到了这样的了一个情况 我没有配置 "group.id", 然后 kafka 客户端抛出了 InvalidGroupIdException 然后 输出的日志信息 除了类型, 其他 什么都没有, 主要是 么有堆栈信息 这里 来大致看一下 这个问题, 以及…

ES6 箭头函数 Arrow Function

前言 1. ES6 前定义函数 2. ES6 箭头函数语法 3. ES6 箭头函数返回值 4. 箭头函数中的 this 到底是谁 ? 前言 ES6 新增了一种新的函数: 箭头函数 Arrow Function 箭头函数相当于匿名函数,简化了函数定义,将原函数的 function 关键字和函数名都删掉&am…

VSCode 最全实用插件

一、必备插件 🌾Chinese(中文) Settings Sync(配置同步到云端) 可以让我们的vscode配置同步到云端,当我们跟换电脑或者再次安装vscode的时候,只需要登录账号即可同步配置了 wakatime&#xf…

python:写你的第一个爬虫代码

什么是爬虫 爬虫spider,是指向网站或者网络发出请求,获取资源后分析并提取对自己有用的数据的程序。 request:是指用户将自己的信息通过浏览器发送给服务器。 response:服务器收到用户的请求分析后,返回的数据。 注意&…

等保2.0参与医院网络安全管理的重要性

随着现代医院 IT 技术架构的演变、新兴技术的引入,来自医院内外部的各种安全风险不断出现,对医院网络安全提出了更多挑战,医院网络安全在技术层面和管理层面都亟待完善。为此,借鉴相关法律法规、行业标准等,提出提升现…