59 分割回文串

1.题目描述

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

示例 1:

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

示例 2:

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

2.代码

cpp 复制代码
class Solution {
public:
    vector<vector<string>> partition(string s) {
        vector<vector<string>> all_valid_result;
        vector<string> current_path;
        backtracking(s,all_valid_result,current_path);
        return all_valid_result;
    }
private:
    bool is_palindrome(string s){
        int left = 0;
        int right = s.size()-1;
        while(left <= right){
            if(s[left]!=s[right])
                return false;
            left++;
            right--;
        }
        return true;
    }

    void backtracking(string remain_str, 
    vector<vector<string>> &all_valid_result,
    vector<string> current_path){
        if(remain_str.size()==0){
            all_valid_result.push_back(current_path);
            return;
        }
        for(int i = 1; i<=remain_str.size();i++){
            //先切割前i个
            string current_candidate = remain_str.substr(0,i);
            //回文才继续
            if(is_palindrome(current_candidate)){
                current_path.push_back(current_candidate);//加入当前路径['a','a']加入a
                //从剩余字符串的第i个开始往后的字符串开始递归
                backtracking(remain_str.substr(i),all_valid_result,current_path);
                current_path.pop_back();
            }
            
        }
    }
};
 
相关推荐
小白羊丨7 小时前
如何诊断 Prompt 模板导致的效果下降?
人工智能·算法·prompt
OPEN-F8 小时前
C++11/14新特性精讲:移动语义与智能指针实战
开发语言·c++·算法
lisin-lee-cooper8 小时前
【leetcode658】有序数组找出k个最接近x的数
java·数据结构·算法
sunburn-8 小时前
Java堆(Heap)详解与实战教学
java·开发语言·数据结构·ide·算法
智碳能碳管理平台9 小时前
工业能耗台账标准化:能碳管理系统的数据口径怎么设计
算法·能碳管理系统·智碳能碳管理平台·企业能碳管理系统·碳排放核算软件·绿色工厂申报saas·能碳管理平台
带多刺的玫瑰9 小时前
Leecode#15刷题之三数之和
算法·leetcode·职场和发展
哭泣方源炼蛊10 小时前
并查集进阶 P1(带权并查集,并查集分类)
数据结构·c++·算法·二进制·带权并查集
牧羊人.33310 小时前
动手学深度学习 02 | 手写数字识别
图像处理·人工智能·深度学习·算法
武帝为此10 小时前
【InnoDB存储引擎介绍】
数据库·算法
shehuiyuelaiyuehao11 小时前
算法32,连续数组,前缀和+哈希表
算法·leetcode·职场和发展