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

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

 647. 回文子串

题目链接/文章讲解/视频讲解:代码随想录

1.代码展示

//647.回文子串
int countSubstrings(string s) {//step1 构建dp数组,明确dp数组的含义,dp[i][j]的含义是在下标为i和j区间内的字串是否为回文串vector<vector<bool>> dp(s.size(), vector<bool>(s.size(), false));//step2 构建状态转移方程//当s[i] != s[j]时,此时必定不为回文子串//当s[i] == s[j]时,有三种情况//情况一:i = j,此时就是本身,因此必定为回文子串//情况二:i + 1 = j,此时就如aa的形式,因此也是回文子串//情况三:j > i + 1,此时当dp[i + 1][j - 1]为回文字串时,dp[i][j]才是回文子串//step3 初始化dp数组,都为false//step4 开始遍历int nResult = 0;for (int i = s.size() - 1; i >= 0; i++) {for (int j = i; j < s.size(); j++) {if (s[i] == s[j]) {if (j - i <= 1) {nResult++;dp[i][j] = true;}else if (dp[i + 1][j - 1]){nResult++;dp[i][j] = true;}}}}return nResult;
}

 2.本题小节

        思考:本题的重点在于对于dp[i][j]的理解,dp[i][j]的含义是在下标为i和j区间内的字串是否为回文串。构建状态转移方程,当s[i] != s[j]时,此时必定不为回文子串;当s[i] == s[j]时,有三种情况
 ,情况一,i = j,此时就是本身,因此必定为回文子串, 情况二,i + 1 = j,此时就如aa的形式,因此也是回文子串,情况三:j > i + 1,此时当dp[i + 1][j - 1]为回文字串时,dp[i][j]才是回文子串;初始化都为false,最后注意遍历顺序,先下后上,先左后右。

        基本思路:注意理解dp[i][j]的含义,按照代码的思路来即可。

516.最长回文子序列

题目链接/文章讲解/视频讲解:代码随想录

1.代码展示

//516.最长回文子序列
int longestPalindromeSubseq(string s) {//step1 构建dp数组,dp[i][j]的含义是在[i,j]下标的范围内s的最长回文子序列vector<vector<int>> dp(s.size(), vector<int>(s.size(), 0));//step2 状态转移方程//当s[i] == s[j],dp[i][j] = dp[i + 1][j - 1] + 2,//不等时,有两种情况,说明同时加入s[i],s[j]不能满足情况,分别加入s[i]和s[j]试试//则dp[i][j] = max(dp[i][j - 1], dp[i + 1][j])//step3 初始化for (int i = 0; i < s.size(); i++) {dp[i][i] = 1;}//step4 开始遍历for (int i = s.size() - 1; i >= 0; i++) {for (int j = i + 1; j < s.size(); j++) {if (s[i] == s[j]) {dp[i][j] = dp[i + 1][j - 1] + 2;}else {dp[i][j] = max(dp[i][j - 1], dp[i + 1][j]);}}}return dp[0][s.size() - 1];
}

 2.本题小节

        思考:明确dp数组的含义。dp[i][j]的含义是在[i,j]下标的范围内s的最长回文子序列。状态转移方程,当s[i] == s[j],dp[i][j] = dp[i + 1][j - 1] + 2,不等时,有两种情况,说明同时加入s[i],s[j]不能满足情况,分别加入s[i]和s[j]试试,则dp[i][j] = max(dp[i][j - 1], dp[i + 1][j]),初始化时对角线都为1,根据dp数组可以得。遍历时先下后上,先左后右。

        基本思路:注意dp数组的含义,按照动态规划步骤来。

动态规划总结:代码随想录

http://www.lryc.cn/news/157759.html

相关文章:

  • 对线程池设置做压测
  • 【网络通信 -- WebRTC】项目实战记录 -- mediasoup android 适配 webrtc m94
  • 【力扣周赛】第 357 场周赛(⭐反悔贪心)
  • css重置
  • tcpdump相关
  • MFC新建内部消息
  • linux查找目录
  • 机器学习:可解释学习
  • UE5- c++ websocket里实现调用player里的方法
  • 线性代数的学习和整理18:什么是维度,什么是秩?秩的各种定理秩的计算 (计算部分未完成)
  • Centos 6.5 升级到Centos7指导手册
  • 详解python中的映射类型---字典
  • gdal求矢量图形的形心
  • <深度学习基础> Batch Normalization
  • Ubuntu yolov5 环境配置
  • 【自执行闭包JS逆向】某网站登录MD5加密分析
  • Stable Diffuse 之 安装文件夹、以及操作界面 UI 、Prompt相关说明
  • 【Linux】- 一文秒懂shell编程
  • CentOS下多网卡绑定多IP段时导致只有一个会通的问题解决
  • 关于实现 Vue 动态数据显示,比如数字 0 或 1 怎么显示为 男 或 女等等的动态显示实现方法
  • mac制作ssl证书|生成自签名证书,nodejs+express在mac上搭建https+wss(websocket)服务器
  • Unix System V BSD POSIX 究竟是什么?
  • 数据集学习笔记(六):目标检测和图像分割标注软件介绍和使用,并转换成YOLO系列可使用的数据集格式
  • 【高阶数据结构】红黑树 {概念及性质;红黑树的结构;红黑树的实现;红黑树插入操作详细解释;红黑树的验证}
  • 获取对象占用内存
  • mysql UUID 作为主键的问题
  • 2023高教社杯全国大学生数学建模竞赛选题建议
  • 分类预测 | MATLAB实现GRNN广义回归神经网络多特征分类预测
  • 低功耗窗帘电机解决方案成功应用并通过 Matter 1.1 认证
  • 如何修复老照片?老照片修复翻新的方法