LeetCode热题100 分割回文串

题目描述

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

示例 1:

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

示例 2:

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

提示:

1 <= s.length <= 16

s 仅由小写英文字母组成

思路

进行dfs遍历,每层从l到r是否合理。

代码

cpp 复制代码
class Solution {
public:
    vector<vector<string>> partition(string s) {
        // 记录多个答案
        vector<vector<string>>ans;
        // 记录单个答案
        vector<string>res;

        // dfs遍历每种情况
        dfs(s, 0, s.length(), res, ans);

        return ans;
    }

    void dfs(string &s, int first, int n, vector<string> &res, vector<vector<string>> &ans)
    {
        if(first == n)
        {
            ans.push_back(res);
            return;
        }

        for(int i = first; i < n; ++i)
        {
            // 判断[l-r]是否是回文串
            int l = first, r = i;
            while(l < r && s[l] == s[r]) ++l, --r;
            if(l > r || s[l] == s[r])
            {
                res.push_back(s.substr(first, i - first + 1));
                dfs(s, i + 1, n, res, ans);
                res.pop_back();
            }
        }
    }

};
相关推荐
程序猿阿森12 分钟前
深入解析 NLI:RAG 与大模型防幻觉的“最后一道防线”
前端·人工智能·算法
General_G1 小时前
创建型模式—原型(Prototype)模式
c++·设计模式·原型模式
syagain_zsx1 小时前
protobuf 实战:从 .proto 到 C++ 序列化的完整链路
c++·学习·程序人生·谷歌·protobuf
而后笑面对1 小时前
浅尝贝叶斯估计
人工智能·算法·机器学习
welfare9622 小时前
新号别搞:C++_list
开发语言·c++
xiaoye-duck2 小时前
《C++ 项目:手写大模型接入 SDK》云端 API 调用基础与 Apifox 调试实战
网络·c++·语言模型
坤坤子吖2 小时前
Linux 线程同步与互斥——条件变量与线程同步
linux·开发语言·c++·笔记·学习
杜 硕2 小时前
从零开始的C++生活——第二讲——03
c++·生活
u0111026752 小时前
图片生成任务的日志记录与敏感信息取舍
前端·图像处理·算法·ai作画
花间相见3 小时前
【计算基础|MySQL08】索引(上):为什么是 B+ 树
数据结构·mysql·算法·架构