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

代码随想录算法训练营第四十天

LeetCode题目:

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

其他:

今日总结
往期打卡


647. 回文子串

跳转: 647. 回文子串

学习: 代码随想录公开讲解

问题:

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

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

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

思路:

动态规划,下标的含义是从 x到y 的子串是否是回文串
一个元素是回文串,两个元素只要相等就是回文串
对于这两个特殊情况可以特判 i,j 差值小于2,也可以初始化解决
是连续子串,递推公式为

if(dp[j+1][i-1]&&s.charAt(i)==s.charAt(j)){dp[j][i] = true;
}

为每个回文串计数即可统计出回文子串的数量

复杂度:

  • 时间复杂度: O ( n 2 ) O(n^2) O(n2)
  • 空间复杂度: O ( n 2 ) O(n^2) O(n2)

代码:

class Solution {public int countSubstrings(String s) {int n = s.length();boolean[][] dp = new boolean[n+1][n+1];for(int i=0;i<n;i++){dp[i][i] = true;dp[i+1][i] = true;}int ans = n;for(int i=1;i<n;i++){for(int j=i-1;j>=0;j--){if(dp[j+1][i-1]&&s.charAt(i)==s.charAt(j)){// System.out.println(j+" "+i);dp[j][i] = true;ans++;}}}// for(var arr:dp)// System.out.println(Arrays.toString(arr));return ans;}
}

516. 最长回文子序列

跳转: 516. 最长回文子序列

学习: 代码随想录公开讲解

问题:

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

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

思路:

下标的含义依然是截取子串
这题求的是最长回文子序列长度
可以让dp数组值为子串中最长回文子序列的长度
从 x+1,y , x,y-1 或从 x+1,y-1的最长回文子序列推导到当前
如果算上x,y还是回文子序列,不管只算一个是不是回文子序列,从不算x和y直接+2肯定是最大的
如果算上x,y不是回文,就要考虑只算x或只算y会不会更大了

复杂度:

  • 时间复杂度: O ( n 2 ) O(n^2) O(n2)
  • 空间复杂度: O ( n 2 ) O(n^2) O(n2)

代码:

class Solution {public int longestPalindromeSubseq(String s) {int n = s.length();int[][] dp = new int[n][n];for(int i=0;i<n;i++){dp[i][i] = 1;}for(int i=1;i<n;i++){for(int j=i-1;j>=0;j--){if(i==j+1||dp[j+1][i-1]>0){if(s.charAt(i)==s.charAt(j))dp[j][i] = dp[j+1][i-1]+2;else dp[j][i] = Math.max(dp[j+1][i-1],Math.max(dp[j][i-1],dp[j+1][i]));}}}return dp[0][n-1];}
}

总结

动态规划章节练习了用递推解决问题
从斐波那契数列,爬楼梯,路径数这种比较明显的连续递推(由固定的前一个或者前几个值推导当前值)
整数拆分(从不拆,拆两半,1块和剩余数的拆分),不同的二叉搜索树(左子树右子树的数量)这种抽象的连续递推
到背包类问题,打家劫舍,股票交易状态机模型,子序列问题,编辑距离问题,回文子串问题.

往期打卡

代码随想录算法训练营第三十九天

代码随想录算法训练营第三十八天

代码随想录算法训练营第三十七天

代码随想录算法训练营第三十五&三十六天

代码随想录算法训练营第三十四天

代码随想录算法训练营第三十三天(补)

代码随想录算法训练营第三十二天

代码随想录算法训练营第三十一天

代码随想录算法训练营第三十天(补)

代码随想录算法训练营第二十九天

代码随想录算法训练营第二十八天

代码随想录算法训练营第二十七天(补)

代码随想录算法训练营第二十六天

代码随想录算法训练营第二十五天

代码随想录算法训练营第二十四天

代码随想录算法训练营第二十三天

代码随想录算法训练营周末四

代码随想录算法训练营第二十二天(补)

代码随想录算法训练营第二十一天

代码随想录算法训练营第二十天

代码随想录算法训练营第十九天

代码随想录算法训练营第十八天

代码随想录算法训练营第十七天

代码随想录算法训练营周末三

代码随想录算法训练营第十六天

代码随想录算法训练营第十五天

代码随想录算法训练营第十四天

代码随想录算法训练营第十三天

代码随想录算法训练营第十二天

代码随想录算法训练营第十一天

代码随想录算法训练营周末二

代码随想录算法训练营第十天

代码随想录算法训练营第九天

代码随想录算法训练营第八天

代码随想录算法训练营第七天

代码随想录算法训练营第六天

代码随想录算法训练营第五天

代码随想录算法训练营周末一

代码随想录算法训练营第四天

代码随想录算法训练营第三天

代码随想录算法训练营第二天

代码随想录算法训练营第一天

http://www.xdnf.cn/news/442837.html

相关文章:

  • ubuntu24.04上安装NVIDIA driver+CUDA+cuDNN+Anaconda+Pytorch
  • Webpack其他插件
  • Emacs 折腾日记(二十三)——进一步提升编辑效率
  • Docker 疑难杂症解决指南:从入门到进阶的全面剖析
  • 第五章 LVGL 字库使用
  • 【测试】BUG
  • 深度理解指针(2)
  • map格式可以接收返回 fastjson2格式的数据 而不需要显示的转换
  • 占位符读取标准输入缓冲区规则
  • WEB安全--Java安全--CC1利用链
  • 生成式人工智能认证(GAI认证)官网 - 全国统一认证中文服务平台上线
  • [python] python中的魔法方法和属性
  • 【Python 异常处理】
  • 【c语言内存函数】
  • Kuka AI音乐AI音乐开发「人声伴奏分离」 —— 「Kuka Api系列|中文咬字清晰|AI音乐API」第6篇
  • 梯度优化提示词:模型生成精准回答的秘密
  • libmemcached库api接口讲解四
  • 反向搭理搭建于网络安全的分层关系讨论
  • 计算机网络-MPLS VPN基础概念
  • FlashInfer - 测试的GPU H100 SXM、A100 PCIe、RTX 6000 Ada、RTX 4090
  • 具身智能梳理以及展望
  • React Flow 简介:构建交互式流程图的最佳工具
  • 如何远程执行脚本不留痕迹
  • MCU ESP32-S3+SD NAND(贴片式T卡):智能皮电手环(GSR智能手环)性能与存储的深度评测
  • MoonBit正式入驻GitCode!AI时代的编程语言新星,开启高性能开发新纪元
  • LVS负载均衡群集和keepalive
  • Canvas知识框架
  • CSP信奥赛新增的算法-马拉车算法(Manacher‘s Algorithm)
  • 使用 Semantic Kernel 调用 Qwen-VL 多模态模型
  • YashanDB V23.4 LTS 正式发布|两地三中心、库级闪回重磅特性上线,生产级可用性再升级