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

(回溯) LeetCode 131. 分割回文串

原题链接

一. 题目描述

给你一个字符串 s,请你将 s 分割成一些子串,使每个子串都是 回文串。返回 s 所有可能的分割方案。

示例 1:

输入:s = "aab"
输出:[["a","a","b"],["aa","b"]]

示例 2:

输入:s = "a"
输出:[["a"]]

提示:

  • 1 <= s.length <= 16
  • s 仅由小写英文字母组成

二. 解题思路

首先得明确什么是回文串,回文串就是能够对称的字符串,还是老样子。

1. 明确递归参数:字符串s 和当前路径的起点 startindex 。

2. 确定递归的终止条件:当startindex 的大小超过字符串的长度的时候终止,证明已经切割到了字符串的最后,直接将path 路径添加到结果数组res 中即可,这里小伙伴可能要问了,你这还没有判断是不是回文串,对,因为我在后面的单层递归中做了限制,只有回文子串才能进path 数组。所以这里的path 数组中一定是回文子串。

3. 单层递归逻辑:相信做了这么多的题目了,一定知道怎么写吧,只需要加一条判断是不是回文子串的限制条件即可,如果是将其加入到path 数组中进行递归即可,如果不是直接continue;最后做好回溯即可。

话不多说!!!上代码!!

三. 代码

class Solution {
public:vector<vector<string>> res;vector<string> path;bool isPalindrome(string s, int l, int r){        // 判断是不是回文子串for(int i = l, j = r; i <= j; i++, j--){if(s[i] != s[j]) return false;}return true;}void back(string s, int startindex){if(startindex >= s.size()){res.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);back(s, i + 1);path.pop_back();    // 回溯}}}vector<vector<string>> partition(string s) {back(s, 0);return res;}
};

四. 总结

如果你将前面的题目做了练习的话相信这类题目已经非常简单了吧!!!继续加油!!!

时间复杂度:O(n * 2^n)

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

喜欢的话给个关注吧!!

相关文章:

  • 【Linux进程篇】进程终章:POSIX信号量线程池线程安全的单例模式自旋锁读者写者问题
  • 图像的特征提取
  • 树莓派4/5:运行Yolov5n模型(文末附镜像文件)
  • LVS实验——部署DR模式集群
  • VSCODE platformio ESP32-S3 内置 JTAG 接口断点单步调试笔记
  • 【云服务器系列】基于华为云OBS实现Picgo和Typora的完美融合
  • 常见硬件工程师面试题(四)
  • 自动化测试 — selenium + Java
  • Docker最佳实践(四):安装redis
  • IDEA彻底卸载以及安装总结
  • 江科大/江协科技 STM32学习笔记P21
  • 加密案例分享:电子设备制造行业
  • 鸿蒙(API 12 Beta2版)媒体开发【Audio Kit简介】音频服务
  • python实战:数据分析基础知识
  • MySQL——索引(三)删除索引
  • Js基础知识(一) - 变量
  • JS数组方法汇总
  • nfs客户端进程变D,延伸linux的lock
  • nginx(二):进阶配置介绍--rewrite用法,压缩,https虚拟主机等
  • XForms - 更强大的Form
  • 道格拉斯-普克 抽稀算法 附javascript实现
  • 开放才能进步!Angular和Wijmo一起走过的日子
  • 七牛云 DV OV EV SSL 证书上线,限时折扣低至 6.75 折!
  • 如何进阶一名有竞争力的程序员?
  • 小程序button引导用户授权
  • 一起来学SpringBoot | 第三篇:SpringBoot日志配置
  • Java数据解析之JSON
  • mysql 慢查询分析工具:pt-query-digest 在mac 上的安装使用 ...
  • 带你开发类似Pokemon Go的AR游戏
  • ​​​​​​​ubuntu16.04 fastreid训练过程
  • # windows 安装 mysql 显示 no packages found 解决方法
  • #14vue3生成表单并跳转到外部地址的方式
  • #HarmonyOS:基础语法
  • #Linux(make工具和makefile文件以及makefile语法)
  • (175)FPGA门控时钟技术
  • (2)(2.4) TerraRanger Tower/Tower EVO(360度)
  • (3)Dubbo启动时qos-server can not bind localhost22222错误解决
  • (el-Transfer)操作(不使用 ts):Element-plus 中 Select 组件动态设置 options 值需求的解决过程
  • (Matalb分类预测)GA-BP遗传算法优化BP神经网络的多维分类预测
  • (独孤九剑)--文件系统
  • (附源码)小程序儿童艺术培训机构教育管理小程序 毕业设计 201740
  • (十八)用JAVA编写MP3解码器——迷你播放器
  • (一)基于IDEA的JAVA基础10
  • (转)visual stdio 书签功能介绍
  • (最优化理论与方法)第二章最优化所需基础知识-第三节:重要凸集举例
  • *p=a是把a的值赋给p,p=a是把a的地址赋给p。
  • .net 4.0发布后不能正常显示图片问题
  • .NET Core 通过 Ef Core 操作 Mysql
  • .NET 动态调用WebService + WSE + UsernameToken
  • .NET 中 GetProcess 相关方法的性能
  • .NET/C# 中设置当发生某个特定异常时进入断点(不借助 Visual Studio 的纯代码实现)
  • .netcore 6.0/7.0项目迁移至.netcore 8.0 注意事项
  • .net程序集学习心得
  • .NET设计模式(8):适配器模式(Adapter Pattern)
  • /etc/skel 目录作用