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();
            }
            
        }
    }
};
 
相关推荐
若亦_几秒前
排序>>选择排序
数据结构·算法·排序算法
重生之小比特5 分钟前
【算法拾光】前缀和|一维前缀和 + 二维前缀和
数据结构·算法
释厄62324 分钟前
矢量词汇向下不向上公理即词汇归位定律——肤浅即表面
java·人工智能·算法·去中心化·1024程序员节
海绵宝宝转agent30 分钟前
Leetcode100+面经
java·笔记·学习·算法·leetcode·深度优先
Shaoshing35 分钟前
LeetCode100 283.移动零
java·数据结构·算法·leetcode
海绵宝宝转agent36 分钟前
LeetCode100个人题解+java面经总结
java·开发语言·笔记·学习·算法
飞Link9 小时前
什么是 AirSim?一文读懂无人机仿真平台
python·算法·无人机
一去不复返的通信er11 小时前
贪心算法-合并区间(LeetCode 56)
算法·leetcode·贪心算法
Shaoshing12 小时前
LeetCode100 49. 字母异位词分组
java·算法