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

组合问题(分割字符串)

131. 分割回文串 - 力扣(LeetCode)

class Solution {
private:vector<vector<string>>result;vector<string>path;void backtracking(string &s,int startIndex){if(startIndex>=s.size()){result.push_back(path);return;}for(int i=startIndex;i<s.size();i++){if(isPalindrome(s,startIndex,i)){string str=s.substr(startIndex,i-startIndex+1);path.push_back(str);}else{continue;}backtracking(s,i+1);path.pop_back();}}bool isPalindrome(string &s,int start,int end){for(int i=start,j=end;i<j;i++,j--){if(s[i]!=s[j]){return false;}}return true;}
public:vector<vector<string>> partition(string s) {backtracking(s,0);return result;}
};

分割回文子串也是一道组合问题,构造树形结构,使每层分割每一个元素,下一层分割为剩余元素中的每一个元素。

目标结果在叶子节点上,和组合问题的逻辑相同,将每一个树的遍历路径存在path数组中,如果遇到不符合目标值的,就continue出去,所以符合条件的路径都存在了path数组中。

终止条件:当startIndex>=s.size(),也就是到达了叶子节点时,将path数组的值push进result数组中。startIndex定义的时分割的是第几个元素。

单层递归逻辑:从上一层分割的第startIndex元素开始,向后遍历直到结尾,判断是否为回文子串,如果是,则提取从startIndex开始后i-startIndex+1个元素(std::substr()函数:前一个值值从字符串的第几个元素开始取元素,后一个值指取几个元素),将所得元素放入path数组中,再向下一层递归,i的值加一,也就是将分割的值向后进一位。

回溯逻辑:因为要回溯到上一层去分割不同元素,所以要将存入的值pop出。

判断回文子串逻辑,定义一个返回值是布尔值的函数,传入字符串,分割开始值和字符串结尾值,遍历字符串开始和字符串结束是否相同,相同则为回味回文子串。

组合问题(二叉树,递归,回溯算法)-CSDN博客

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

相关文章:

  • 【Java持久层框架对比与使用】
  • 【详解自定义类型:联合和枚举】:联合体类型的声明、特点、大小的计算,枚举类型的声明、优点和使用
  • 522UART是什么
  • 4. 寻找两个正序数组的中位数
  • 复盘20250522
  • C++:list容器,deque容器
  • 六大设计原则
  • 如何在 FastAPI 中合理使用 Pydantic 的 Alias
  • UE4 Simulation Stage 制作 平流
  • 开疆智能Profinet转RS485网关连接富士电机配置案例
  • 问题 | 撰写一份优秀的技术文档,既是科学也是艺术。
  • 模仿医学专家思维的Citrus:助力医疗决策支持
  • 自定义类型-联合体
  • 十进制转二进制
  • git@gitee.com: Permission denied (publickey). fatal: 无法读取远程仓库
  • N-gram语言模型原理与实战教程
  • sqli-labs第二十一/二十二关——POST-base64
  • STL 转 STP 深度技术指南:从 3D 打印模型到工程标准的跨领域转换全解析(附迪威模型在线方案)
  • 亚马逊选品可以从以下几个方面着手
  • 浙江大学python程序设计(陈春晖、翁恺、季江民)习题答案-第十章
  • 各种标准的简称和字母标识
  • 01-jenkins学习之旅-window-下载-安装-安装后设置向导
  • Android 串口-usb-serial-for-android
  • Spring Boot——自动配置
  • 如何给文件夹添加编号?批量给文件夹添加数字、字母、日期编号
  • 前端判空:与后端 “千层套路” 的斗智斗勇
  • highCharts生成3D饼图
  • 若依Ruoyi富文本编辑器Quill粘贴图片改成文件上传(不使用base64)
  • 【C/C++】深入解析Linux下C/C++内存管理全攻略(纲要)
  • 从0到1玩转TypeScript:开启类型世界的奇妙冒险