006. 分割回文串

news2024/11/24 8:30:12

1.题目链接:

131. 分割回文串

2.解题思路:

2.1.题目要求:

给一个字符串 s ,要求把 s 分割成一些子串,并使每个子串都是 回文串。

回文串的概念:正反顺序都一样的字符串。

举例:

输入:s = "aab"

输出:[["a","a","b"],["aa","b"]]

2.2.思路:

for+递归构成 n叉树,用于查找每一份字串组合,再补充 判断是不是回文串的逻辑,以及终止条件的确认

n叉树如下:

2.3.回溯三部曲:

2.3.1.确定回溯函数参数

path存储一条分割方案的字符串,result是字符串结果集。

参数默认输入 s ,startIndex 用于避免重复切割和切割过程中字串范围确定。

vector<vector<string>> result;
vector<string> path; // 放已经回文的子串
void backtracking (const string& s, int startIndex) {

2.3.2.确定终止条件

当切割完最后一个字符串字符的时候,说明已经找到了一组分割方案了,返回到结果集里。

那什么是作为切割完最后一个字符的判断条件?

startIndex >= s.size( ) ,因为 startIndex 在单层遍历逻辑里,记录每次递归的起始位置,到最下面一层的递归时,startIndex 默认是等于 s.size( ) 就停止了的,但大于的情况是怎么产生的?我的理解是 xxxxxx

void backtracking (const string& s, int startIndex) {
    // 如果起始位置已经大于s的大小,说明已经找到了一组分割方案了
    if (startIndex >= s.size()) {
        result.push_back(path);
        return;
    }
}

2.3.3.确定单层遍历逻辑

这里搜集不同的分割方案,以及判断当下递归的for搜集的每一段字符串是不是符合回文串的定义,不符合就跳过并继续循环。

判断回文子串的范围是如何确定的?

因为每一次递归,搜集指针 i 都从 startIndex 的位置出发(startIndex每次递归都会更新)然后 i 向后遍历,直到末尾,在这个情况下 不断更新的 i 和 在非递归的情况下不动的 startIndex 的位置形成的范围,就可以不断判断是不是回文串了,是就搜集,不是就跳过

for (int i = startIndex; i < s.size(); i++) {
    if (isPalindrome(s, startIndex, i)) { // 是回文子串
        // 获取[startIndex,i]在s中的子串
        string str = s.substr(startIndex, i - startIndex + 1);
        path.push_back(str);
    } else {                // 如果不是则直接跳过
        continue;
    }
    backtracking(s, i + 1); // 寻找i+1为起始位置的子串
    path.pop_back();        // 回溯过程,弹出本次已经填在的子串
}

 

判断回文子串的函数 isPalindrome 用的是双指针法

代码如下:

bool isPalindrome(const 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;
 }

 

2.4.总代码:

class Solution {
private:
    vector<vector<string>> result;
    vector<string> path; // 放已经回文的子串
    void backtracking (const string& s, int startIndex) {
        // 如果起始位置已经大于s的大小,说明已经找到了一组分割方案了
        if (startIndex >= s.size()) {
            result.push_back(path);
            return;
        }
        for (int i = startIndex; i < s.size(); i++) {
            if (isPalindrome(s, startIndex, i)) {   // 是回文子串
                // 获取[startIndex,i]在s中的子串
                string str = s.substr(startIndex, i - startIndex + 1);
                path.push_back(str);
            } else {                                // 不是回文,跳过
                continue;
            }
            backtracking(s, i + 1); // 寻找i+1为起始位置的子串
            path.pop_back(); // 回溯过程,弹出本次已经填在的子串
        }
    }
    bool isPalindrome(const 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) {
        result.clear();
        path.clear();
        backtracking(s, 0);
        return result;
    }
};

3.记录:

中文感觉没精神写,写的没气力,果然休息会儿,晚上写就好的多的多了,依情况而定,不能强来。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/53581.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

IC模拟版图工程师高薪进阶之路,三年实现年薪30w+

模拟版图是模拟IC设计岗位的一种&#xff0c;随着国内半导体行业的不断发展&#xff0c;岗位的需求也越来越多。而每个芯片最终能够付诸于生产都离不开模拟版图设计师的功劳&#xff0c;所以目前芯片产业对于这类人才需求越来越大。 什么是模拟版图设计工程师&#xff1f; 模…

BSA牛血清白蛋白修饰Fe3O4纳米颗粒 BSA-MION

产品名称&#xff1a;BSA牛血清白蛋白修饰Fe3O4纳米颗粒 英文名称&#xff1a;BSA-MION 用途&#xff1a;科研 状态&#xff1a;固体/粉末/溶液 产品规格&#xff1a;1g/5g/10g 保存&#xff1a;冷藏 储藏条件&#xff1a;-20℃ 储存时间&#xff1a;1年 牛血清中的简单蛋白&am…

2022年第十一届认证杯数学中国数学建模国际赛小美赛:D题野生动物贸易是否应该长期禁止建模方案及代码实现

更新进展 &#xff08;1&#xff09;2022-12-2 9:00 发布预售 &#xff08;2&#xff09;2022-12-2 10:40 发布建模思路、代码以及参考文献 &#xff08;3&#xff09;待更新内容&#xff1a;进一步对全部数据分析 1 题目 野生动物市场被怀疑是当前疫情和2002年SARS疫情的…

blender中的灯光和相机

灯光环境光灯光基础灯光基本属性 EV渲染器日光面光天空盒IES灯光 &#xff08;灯光遮罩&#xff09;自发光移动摄像机切换摄像机摄像机属性环境光 在渲染视图中&#xff0c;没有任何光时&#xff0c;物体只受环境光的影响 灯光基础 1 四种灯光&#xff0c;点光&#xff0c;…

安卓期末大作业——仿番茄免费小说APP

《移动应用开发实践》实践报告 APP名称&#xff1a; 番茄免费小说 要求&#xff1a; 格式&#xff1a;宋体&#xff0c;小四号字&#xff1b;首行缩进&#xff1b;行距&#xff1a;1.5倍。 每人独立完成Android App的设计与开发App必须包含SOLite数据库操作 一、所调查的Ap…

Android -- 每日一问:能讲讲 Android 的 Handler 机制吗?

典型回答 讲清楚Android中的消息机制&#xff0c;先表述一下和Handler相关的一些类&#xff1a; Message&#xff1a;消息分为硬件产生的消息(如按钮、触摸)和软件生成的消息&#xff1b; MessageQueue&#xff1a;消息队列的主要功能向消息池投递消息(MessageQueue.enqueueMe…

疫情下为什么年轻、未婚女性更容易拿到offer

最近发现一个奇怪的现象&#xff0c;为什么会奇怪。大家别着急&#xff0c;容我慢慢道来。由于疫情开始后&#xff0c;也是大家开始躺平后&#xff0c;企业在有意、无意的疯狂裁员&#xff0c;导致人心惶惶&#xff0c;大家都不敢轻易跳槽了。甚至有的人很庆幸&#xff0c;有份…

一文弄懂JUnit5相关注解

JUnit5 JUnit是Java生态系统中最流行的单元测试框架之一。JUnit5版本包含许多令人兴奋的创新&#xff0c;其目标是支持Java8和更高版本中的新功能&#xff0c;并支持多种不同风格的测试。 Maven依赖 启动JUnit5.x.0非常简单&#xff1b;我们只需要将以下依赖项添加到pom.xml…

昆石网络 VOS3000虚拟运营支撑系统任意文件读取漏洞

漏洞描述&#xff1a; 昆石网络 VOS3000虚拟运营支撑系统 通过 %c0%ae%c0%ae 等字符绕过检测&#xff0c;可导致任意文件读取漏洞。 漏洞利用条件: 对⽤户查看或下载的⽂件没有限制或者限制绕过&#xff0c;就可以查看或下载任意⽂件 漏洞影响范围&#xff1a; VOS3000 漏…

阿里云Redis性能压力测试(二十)

文章目录1.云Redis性能压力测试2.安装redis-banchmark压测工具3.压测两节点的Redis集群4.压测四节点的Redis集群4.1.扩容集群为四节点4.2.压力测试5.压测结果对比1.云Redis性能压力测试 我们当前Redis集群是2个节点2个分片&#xff0c;使用redis-benchmark工具对Redis集群进行…

轨迹预测——day 57 基于车道交叉和考虑驾驶方式的终点生成模型的前目标车辆轨迹预测

Trajectory Prediction of Preceding Target Vehicles Based on Lane Crossing and Final Points Generation Model Considering Driving Styles导读II.问题表述与系统架构A. Trajectory Prediction for PTVs&#xff08;preceding target vehicles&#xff09;B. Position and…

python自学程序练习01:99乘法表

#完成99乘法表 #1*11 #1*22 2*24 #1*33 2*36 3*39 #很明显要两个循环print(打印99乘法表&#xff1a;) for i in range(1,10):for j in range(1, i1):print(f{j}*{i}{j * i}, end )结果如上图所示&#xff0c;很明显发现&#xff0c;是我们想要的数据但是他的形式需要有所修改。…

Vue3创建项目(四)main.js配置,避坑指南

系列文章目录 第一篇 Vue3创建项目&#xff08;一&#xff09;新手教程 第二篇 Vue3创建项目&#xff08;二&#xff09;router路由配置和使用 第三篇 Vue3创建项目&#xff08;三&#xff09;Vuex配置 目录 系列文章目录 main.js配置&#xff0c;直接看图&#xff0c;如下…

作为前端你还不懂MutationObserver?那Out了

&#x1f431;个人主页&#xff1a;不叫猫先生 &#x1f64b;‍♂️作者简介&#xff1a;前端领域新星创作者、华为云享专家、阿里云专家博主&#xff0c;专注于前端各领域技术&#xff0c;共同学习共同进步&#xff0c;一起加油呀&#xff01; &#x1f4ab;系列专栏&#xff…

Netty(一)- Netty与BIO、NIO、AIO介绍

文章目录一、Netty的介绍二、Netty的应用场景1. 互联网行业2. 游戏行业3. 大数据领域三、I/O模型1. Java BIO&#xff08;1&#xff09;Java BIO 基本介绍&#xff08;2&#xff09;Java BIO 工作机制&#xff08;3&#xff09;Java BIO 应用实例&#xff08;4&#xff09;Java…

css如何快速将网站设置为灰色背景

突然想起写这篇文章是因为&#xff0c;公司的产品大早上打电话说&#xff1a;“赶紧&#xff0c;业务刚通知&#xff0c;我们的官网、小程序、公众号的首页需要变为灰色背景&#xff0c;最好在10点半之前上线”。当时心有千般不愿&#xff0c;但最后生活压倒我坚硬的脊梁。哈哈…

关于《web课程设计》网页设计 用html css做一个漂亮的网站 仿新浪微博个人主页

&#x1f389;精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业…

C语言用高斯消元法求行列式

目录 数学原理 程序设计 整体流程与代码 测试函数 测试结果 数学原理 高斯消元法求行列式&#xff1a;利用初等行变换&#xff0c;化为上三角行列式&#xff0c;求其主对角线的乘积 行列式的初等行变换&#xff1a; 1&#xff09;换行变换&#xff1a;交换两行&#xf…

静态路由配置案例

静态路由配置案例配置静态路由原理命令&#xff1a;案例&#xff1a;最后结果&#xff1a;配置静态路由原理命令&#xff1a; [Huawei]ip route-static 来源ip 子网掩码 去向ip [Huawei]ip route-static 192.168.20.1 255.255.255.0 192.168.1.2 案例&#xff1a; pc1,pc2,a…

世界杯里的数学知识

一、前言 2022 年卡塔尔世界杯足球赛已经开幕&#xff0c;这是历史上首次在卡塔尔和中东国家境内举行、也是第二次在亚洲举行的世界杯足球赛。除此之外&#xff0c;卡塔尔世界杯还是首次在北半球冬季举行、首次由从未进过世界杯决赛圈的国家举办的世界杯足球赛。世界杯足球赛里…