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

力扣--动态规划/回溯算法131.分割回文串

思路分析:

  1. 动态规划 (DP): 使用动态规划数组 dp,其中 dp[i][j] 表示从字符串 s[i]s[j] 是否为回文子串。
  2. 预处理动态规划数组: 从字符串末尾开始,遍历每个字符组合,判断是否为回文子串,填充动态规划数组。
  3. 深度优先搜索 (DFS): 利用递归,尝试从字符串的每个位置开始,生成满足回文子串条件的组合。
  4. 递归函数 dfs
    • 接收参数:dp 为动态规划数组,s 为原始字符串,start 为当前递归的起始位置。
    • 遍历当前可能的字符串,如果当前字符串是回文子串,则将其加入临时结果集 path
    • 如果当前位置 i 达到字符串末尾,将当前路径加入结果集,并回溯。
    • 继续递归生成组合,注意起始位置更新为 i + 1
    • 回溯过程中,撤销选择,继续尝试其他可能的组合。
  5. 主函数:
    • 创建空的结果集 result 和临时结果集 path
    • 调用深度优先搜索函数 dfs,从起始位置 0 开始生成组合。
    • 返回最终结果。
class Solution {// 存储最终结果的二维数组vector<vector<string>> result;// 存储当前正在生成的组合的临时结果vector<string> path;// 定义深度优先搜索函数,用于生成组合void dfs(vector<vector<bool>>& dp, string s, int start) {// 遍历当前可能的字符串for (int i = start; i < s.size(); i++) {// 如果当前字符串是回文子串if (dp[start][i]) {// 将当前回文子串加入临时结果集path.push_back(s.substr(start, i - start + 1));// 如果当前位置 i 达到字符串末尾,将当前路径加入结果集,并回溯if (i == s.size() - 1) {result.push_back(path);path.pop_back();return;}// 继续递归生成组合,注意起始位置更新为 i + 1dfs(dp, s, i + 1);// 回溯,撤销选择,继续尝试其他可能的组合path.pop_back();}}return;}public:// 主函数,生成所有回文子串的组合vector<vector<string>> partition(string s) {int n = s.size();// 二维动态规划数组,dp[i][j] 表示 s[i] 到 s[j] 是否为回文子串vector<vector<bool>> dp(n, vector<bool>(n, false));// 倒序遍历字符串,填充动态规划数组for (int i = n - 1; i >= 0; i--) {for (int j = i; j < n; j++) {// 如果当前字符相等,并且满足回文子串的条件if (s[i] == s[j] && (i == j || i == j - 1 || dp[i + 1][j - 1])) {dp[i][j] = true;}}}// 调用深度优先搜索函数 dfs,从起始位置 0 开始生成组合dfs(dp, s, 0);// 返回最终结果return result;}
};

相关文章:

  • 【MacOS原版镜像下载】讲解
  • LaTex 笔记
  • 视频极速切割无损工具免费版,亲测好用!
  • Flutter APP下载更新
  • 新规正式发布 | 百度深度参编《生成式人工智能服务安全基本要求》
  • C++的萃取技术
  • 5个实用的PyCharm插件
  • 【Echarts】曲线图上方显示数字以及自定义值,标题和副标题居中,鼠标上显示信息以及自定义信息
  • 如何定义resultType和resultMap,它们之间的区别是什么?解释一下<parameterType>的作用和用法。
  • Python——读写属性
  • Apache Doris 2.1.0 版本发布:开箱盲测性能大幅优化,复杂查询性能提升 100%
  • 基于冠豪猪优化算法(Crested Porcupine Optimizer,CPO)的无人机三维路径规划(MATLAB)
  • centos安装hadoop启动问题解决方案
  • multipass基本操作
  • jvisualvm 工具的使用
  • el-input获取焦点 input输入框为空时高亮 el-input值非法时
  • Hibernate【inverse和cascade属性】知识要点
  • iBatis和MyBatis在使用ResultMap对应关系时的区别
  • iOS 颜色设置看我就够了
  • Linux学习笔记6-使用fdisk进行磁盘管理
  • SOFAMosn配置模型
  • webgl (原生)基础入门指南【一】
  • 从0搭建SpringBoot的HelloWorld -- Java版本
  • 后端_MYSQL
  • 聊聊hikari连接池的leakDetectionThreshold
  • 如何打造100亿SDK累计覆盖量的大数据系统
  • 如何学习JavaEE,项目又该如何做?
  • 深度学习中的信息论知识详解
  • 问:在指定的JSON数据中(最外层是数组)根据指定条件拿到匹配到的结果
  • 再谈express与koa的对比
  • 终端用户监控:真实用户监控还是模拟监控?
  • Java性能优化之JVM GC(垃圾回收机制)
  • ​中南建设2022年半年报“韧”字当头,经营性现金流持续为正​
  • # .NET Framework中使用命名管道进行进程间通信
  • # 学号 2017-2018-20172309 《程序设计与数据结构》实验三报告
  • #14vue3生成表单并跳转到外部地址的方式
  • #Linux(make工具和makefile文件以及makefile语法)
  • $var=htmlencode(“‘);alert(‘2“); 的个人理解
  • (1)(1.19) TeraRanger One/EVO测距仪
  • (C#)一个最简单的链表类
  • (带教程)商业版SEO关键词按天计费系统:关键词排名优化、代理服务、手机自适应及搭建教程
  • (附源码)python旅游推荐系统 毕业设计 250623
  • (一)eclipse Dynamic web project 工程目录以及文件路径问题
  • (一)搭建springboot+vue前后端分离项目--前端vue搭建
  • (转)IIS6 ASP 0251超过响应缓冲区限制错误的解决方法
  • (转)拼包函数及网络封包的异常处理(含代码)
  • .Net Attribute详解(上)-Attribute本质以及一个简单示例
  • .NET CF命令行调试器MDbg入门(四) Attaching to Processes
  • .NET Core 2.1路线图
  • .NET 解决重复提交问题
  • .NET 设计模式—适配器模式(Adapter Pattern)
  • .NET国产化改造探索(一)、VMware安装银河麒麟
  • @ 代码随想录算法训练营第8周(C语言)|Day53(动态规划)
  • @Autowired自动装配
  • @Controller和@RestController的区别?