131. 分割回文串

题目描述

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

回文串 是正着读和反着读都一样的字符串。

示例 1:

复制代码
输入:s = "aab"
输出:[["a","a","b"],["aa","b"]]

示例 2:

复制代码
输入:s = "a"
输出:[["a"]]

提示:

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

解答

cpp 复制代码
class Solution {
public:
    vector<vector<string>> res;
    vector<string> path;
    vector<vector<string>> partition(string s) {
        res.clear();
        path.clear();
        backtrack(s, 0);
        return res;
    }

    void backtrack(string &s, int startidx)
    {
        // 分割起点大于等于字符串长度就说明本次分割完成,得到一组结果
        if(startidx >= s.size())
        {
            res.push_back(path);
            return;
        }

        // i 从 startidx 出发判断 [startidx, i]构成的字符串是否回文
        // 若是则加入临时结果中,进行后续的分割
        for(int i = startidx; i < s.size(); i++)
        {
            if(isPalindrome(s, startidx, i))
            {
                string str = s.substr(startidx, i - startidx + 1);
                path.push_back(str);
            }   
            else
            {
                continue;
            }
            backtrack(s, i + 1);
            path.pop_back();
        }
    }

    bool isPalindrome(string &str, int start, int end)
    {
        for(int i = start, j = end; i < j; i++, j--)
        {
            if(str[i] != str[j]) return false;
        }
        return true;
    }
};
相关推荐
Lee川2 小时前
深度解构JavaScript:作用域链与闭包的内存全景图
javascript·面试
_Eleven3 小时前
Pinia vs Vuex 深度解析与完整实战指南
前端·javascript·vue.js
技术狂小子3 小时前
# 一个 Binder 通信中的多线程同步问题
javascript·vue.js
进击的尘埃4 小时前
Service Worker + stale-while-revalidate:让页面"假装"秒开的那些事
javascript
CoovallyAIHub4 小时前
语音AI Agent编排框架!Pipecat斩获10K+ Star,60+集成开箱即用,亚秒级对话延迟接近真人反应速度!
深度学习·算法·计算机视觉
秋水无痕4 小时前
从零搭建个人博客系统:Spring Boot 多模块实践详解
前端·javascript·后端
进击的尘埃4 小时前
基于 Claude Streaming API 的多轮对话组件设计:状态机与流式渲染那些事
javascript
juejin_cn5 小时前
[转][译] 从零开始构建 OpenClaw — 第六部分(持久化记忆)
javascript
juejin_cn5 小时前
[转][译] 从零开始构建 OpenClaw — 第七部分(子智能体系统)
javascript
NineData5 小时前
数据库管理工具NineData,一年进化成为数万+开发者的首选数据库工具?
运维·数据结构·数据库