算法-回溯篇06-分割回文串

分割回文串

力扣题目链接

题目描述

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

解题思路

这里不同于前几道题目,思路改了一下;

解题步骤:

  • isHuiWen函数用于判断字符串是不是回文串;
  • 开始进入回溯函数;
  • 当剩余的字符串的长度为0的时候,把存入的分割子串放入答案列表;
  • 定义一个临时字符串temp,数据是s从begin()到begin() + i;(这里需要注意迭代器的边界判断,搞了很久,最后本地调试了一下才过)
  • 然后判断temp是不是回文串,如果是切割掉temp,把剩余的子串传入回溯函数;
  • 如果不是回文串,继续遍历减少temp的长度,直到长度为1。

题解

复制代码
class Solution {
public:
    vector<vector<string>> ans;
    vector<string> path;

    bool isHuiWen(string s){
        if(s.size() == 1){
            return true;
        }
        int lp = 0, rp = s.size() - 1;
        while(lp < rp){
            if(s[lp] != s[rp]){
                return false;
            }
            lp++;
            rp--;
        }

        return true;
    }

    void BackTrack(string s){
        if(s.size() == 0){
            ans.push_back(path);
            return;
        }
        for(int i = s.size(); i >= 1; i--){
            string temp(s.begin(), s.begin() + i);
            if(isHuiWen(temp)){
                string nexts(s.begin() + i, s.end());
                path.push_back(temp);
                BackTrack(nexts);
                path.pop_back();
            }            
        }

        return;
    }

    vector<vector<string>> partition(string s) {
        BackTrack(s);
        return ans;        
    }
};
相关推荐
qq_410194296 小时前
.NET 8.0 下基于 PaddleOCRSharp 的离线文字识别落地指南
算法·.net
Omics Pro6 小时前
1个月2轮融资!长寿虚拟细胞
数据库·人工智能·算法·机器学习·自然语言处理
residual_fan6 小时前
航空发动机故障诊断专用智能体(六):实际机队健康管理中的应用考量与展望
人工智能·算法·数据挖掘·数据分析
hansang_IR7 小时前
【讲解】CSP-S2026 第一轮初赛
c++·算法
hanlin037 小时前
刷题笔记:力扣第76题-最小覆盖子串
笔记·算法·leetcode
Zane19947 小时前
比较排序跑不出O(nlogn)是数学上证明过的,计数、桶、基数排序凭什么能绕开这堵墙
算法·排序算法
tiger8657 小时前
大语言模型面试和题解,梳理中国主流开源 LLM 系列的发展脉络、技术路线与工程取舍
人工智能·gpt·深度学习·算法·自然语言处理·面试·transformer
我不会起名字3227 小时前
一天一道力扣Hot100(36):深度优先算法---组合总和
数据结构·c++·后端·python·算法·go
虚无的纽扣7 小时前
【力扣刷题】第三天:有效三角形的个数、快乐数
算法·排序算法
tiger8657 小时前
大语言模型面试和题解,Context Engineering 怎么做?长 Prompt、动态上下文与 Memory 管理
人工智能·深度学习·算法·语言模型·自然语言处理·面试·nlp