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

day57【动态规划】647.回文子串 516.最长回文子序列

文章目录

  • 647. 回文子串
  • 516.最长回文子序列

647. 回文子串

  • 力扣题目链接

  • 代码随想录讲解

  • 题意:给你一个字符串 s ,请你统计并返回这个字符串中 回文子串 的数目。

    回文字符串 是正着读和倒过来读一样的字符串。

    子字符串 是字符串中的由连续字符组成的一个序列。

    具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被视作不同的子串。

      示例 1:输入:s = "abc"输出:3解释:三个回文子串: "a", "b", "c"示例 2:输入:s = "aaa"输出:6解释:6个回文子串: "a", "a", "a", "aa", "aa", "aaa"
    
  • 思路:见代码

class Solution {public int countSubstrings(String s) {char[] chars = s.toCharArray();//代表[i,j]范围内的子串是否是回文子串,如果是则为trueboolean[][] dp = new boolean[chars.length][chars.length];//记录回文子串的长度int res = 0;//根据递归公式看遍历顺序,递归公式中由dp[i+1][j-1]推出dp[i][j],是从左下角推过来的。所以遍历顺序要从下到上,从左到右for(int i = chars.length-1; i >= 0; i--) {for(int j = i; j < chars.length; j++) {//如果字符i和j一样,看i和j之间的子串是不是回文子串if(chars[i] == chars[j]) {//如果j和i之间的距离小于等于1,即a/aa这种情况,一个单独的字符或两个相等元素的字符,这样的子串是回文子串,res++if(j-i <= 1) {res++;dp[i][j] = true;} //当i和j之间的距离大于1时,看i和j之间的子串是否是回文子串,即看dp[i+1][j-1],如果是,那么i和j相同,i到j也是回文。else if(dp[i+1][j-1]) {res++;dp[i][j] = true;}} }}return res;}
}

516.最长回文子序列

  • 力扣题目链接

  • 代码随想录链接

  • 题意:给你一个字符串 s ,找出其中最长的回文子序列,并返回该序列的长度。

    子序列定义为:不改变剩余字符顺序的情况下,删除某些字符或者不删除任何字符形成的一个序列。

      示例 1:输入:s = "bbbab"输出:4解释:一个可能的最长回文子序列为 "bbbb" 。示例 2:输入:s = "cbbd"输出:2解释:一个可能的最长回文子序列为 "bb" 。
    
  • 此题求回文子序列,可以不连续。跟回文子串不一样,回文子串要求必须连续。

  • 思路,见代码

class Solution {public int longestPalindromeSubseq(String s) {char[] chars = s.toCharArray();int res = 1;//代表在i,j范围内最长的回文子序列的长度int[][] dp = new int[chars.length][chars.length];for(int i = 0; i < chars.length; i++) {dp[i][i] = 1;}for(int i = chars.length-1; i >= 0; i--) {for(int j = i+1; j < chars.length; j++) {if(chars[i] == chars[j]) {dp[i][j] = dp[i+1][j-1] + 2;} else {dp[i][j] = Math.max(Math.max(dp[i+1][j], dp[i][j-1]),dp[i][j]);}}}return dp[0][chars.length-1];}
}
http://www.lryc.cn/news/223197.html

相关文章:

  • 分享vmware和Oracle VM VirtualBox虚拟机的区别,简述哪一个更适合我?
  • YOLOV5模型运行
  • @Autowired和@Resource注解的区别和联系
  • 设计模式类型
  • Android修行手册-实现利用POI将图片插入到Excel中(文末送书)
  • 低功耗工业RFID设备应用
  • # Oracle 库常见问题排查
  • 矩阵乘积的迹对矩阵求导
  • IP 地址冲突检测工具
  • js树形数组遍历练习,扁平化、格式化、获取节点父级
  • c语言贪吃蛇项目的实现
  • IDEA运行前端vue项目,安装nodejs,以及配置
  • SAP S4后的一些注意点(一)(更新中)
  • Python高级语法----深入asyncio:构建异步应用
  • 5-爬虫-打码平台、打码平台自动登录打码平台、selenium爬取京东商品信息、scrapy介绍安装、scrapy目录结构
  • HTTPS 的工作原理是什么?
  • 【STM32】TIM2的PWM:脉冲宽度调制
  • DRF 学习
  • 2023年双11有哪些便宜的云服务器值得推荐?
  • [Java/力扣160]相交链表
  • LLVM学习笔记(60)
  • Linux命令查看pcap包报文数量、包体包含内容、包长
  • C++二分算法: 找出第 K 小的数对距离
  • 【计算机网络笔记】网络层服务模型——虚电路网络
  • 软文推广过程中,如何精准定位受众
  • 说说对React中类组件和函数组件的理解?有什么区别?
  • Unity 实例化物体以及赋予到父物体之下
  • Docker 介绍
  • VScode连接Xshell 并解决【过程试图写入的管道不存在】报错
  • Redis之事务