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();
            }
            
        }
    }
};
 
相关推荐
@我漫长的孤独流浪13 分钟前
C算法设计与分析------程序设计代码
数据结构·c++·算法
Filotimo_18 分钟前
3.5 排序算法
数据结构·算法·排序算法
一个努力编程人19 分钟前
机器学习————GBDT算法
人工智能·算法·机器学习
深圳市恒星物联科技有限公司20 分钟前
基于图像识别算法与积水传感器的积水监测预警技术方案
人工智能·算法
小美单片机27 分钟前
Proteus8.9安装保姆级教程
c语言·c++·算法·51单片机·proteus·大一新生
white-persist35 分钟前
【红队渗透】Cobalt Strike(CS)红队详细用法实战手册
java·网络·数据结构·python·算法·安全·web安全
舟舟亢亢42 分钟前
算法总结—【动态规划一维、二维、状态压缩】
算法·动态规划
重生之后端学习44 分钟前
152. 乘积最大子数组
数据结构·算法·leetcode·职场和发展·动态规划
weixin_649555671 小时前
C语言程序设计第四版(何钦铭、颜晖)第八章之字符串压缩
c语言·数据结构·算法
单车少年ing1 小时前
一个编码BUG
算法·bug