leetcode-131:分割回文串

简介: leetcode-131:分割回文串

题目

题目链接

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

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

示例 1:

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

示例 2:

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

解题

方法一:回溯

参考链接

class Solution {
public:
    vector<vector<string>> res;
    vector<string> path;
    void backtracing(string& s,int startIndex){
        if(startIndex>=s.size()){
            res.push_back(path);
            return;
        }
        for(int i=startIndex;i<s.size();i++){
            if(isPalindrome(s,startIndex,i)){
                string str=s.substr(startIndex,i-startIndex+1);
                path.push_back(str);
            }
            else continue;//此行注释掉会报错??
            backtracing(s,i+1);
            path.pop_back();
        }
    }
    bool isPalindrome(string& s,int start,int end){
        for(int i=start,j=end;i<j;i++,j--){
            if(s[i]!=s[j]) return false;
        }
        return true;
    }
    vector<vector<string>> partition(string s) {
        backtracing(s,0);
        return res;
    }
};

或者换种写法

class Solution {
public:
    vector<vector<string>> res;
    vector<string> path;
    bool isPalindrome(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 backtracing(string s,int startIndex){
        if(startIndex>=s.size()){
            res.push_back(path);
            return;
        }
        for(int i=startIndex;i<s.size();i++){
            string str=s.substr(startIndex,i-startIndex+1);
            if(isPalindrome(str)){
                path.push_back(str);
                backtracing(s,i+1);
                path.pop_back();
            }
        }
    }
    vector<vector<string>> partition(string s) {
        backtracing(s,0);
        return res;
    }
};

java

class Solution {
    List<List<String>> res=new LinkedList<>();
    List<String> path=new LinkedList<>();
    void dfs(String s,int startIndex){
        if(startIndex==s.length()){
            res.add(new LinkedList<>(path));
            return;
        }
        for(int i=startIndex;i<s.length();i++){
            if(isValid(s,startIndex,i)){
                path.add(s.substring(startIndex,i+1));
                dfs(s,i+1);
                path.remove(path.size()-1);
            }
        }
    }
    boolean isValid(String s,int l,int r){
        if(l>r) return false;
        for(int i=l,j=r;i<=j;i++,j--){
            if(s.charAt(i)!=s.charAt(j)) return false;
        }
        return true;
    }
    public List<List<String>> partition(String s) {
        dfs(s,0);
        return res;
    }
}


相关文章
|
1月前
|
存储 canal 算法
[Java·算法·简单] LeetCode 125. 验证回文串 详细解读
[Java·算法·简单] LeetCode 125. 验证回文串 详细解读
23 0
|
3月前
|
Go
golang力扣leetcode 132.分割回文串II
golang力扣leetcode 132.分割回文串II
26 0
|
6月前
【Leetcode -680.验证回文串Ⅱ -693.交替位二进制数】
【Leetcode -680.验证回文串Ⅱ -693.交替位二进制数】
23 0
|
6月前
|
canal 算法
【Leetcode-121.买卖股票的最佳时机 -125.验证回文串】
【Leetcode-121.买卖股票的最佳时机 -125.验证回文串】
30 0
|
3月前
|
存储 算法 C++
leetcode131分割回文串刷题打卡
leetcode131分割回文串刷题打卡
20 0
|
3月前
leetcode-125:验证回文串
leetcode-125:验证回文串
23 0
|
4月前
|
算法 vr&ar 图形学
☆打卡算法☆LeetCode 214. 最短回文串 算法解析
☆打卡算法☆LeetCode 214. 最短回文串 算法解析
|
4月前
|
算法 vr&ar 图形学
☆打卡算法☆LeetCode 132. 分割回文串 II 算法解析
☆打卡算法☆LeetCode 132. 分割回文串 II 算法解析
|
5月前
|
算法
代码随想录算法训练营第二十六天 | LeetCode 39. 组合总和、40. 组合总和 II、131. 分割回文串
代码随想录算法训练营第二十六天 | LeetCode 39. 组合总和、40. 组合总和 II、131. 分割回文串
30 0
|
6月前
代码随想录Day22 LeetCode T39 组合总和 T40 组合总和II T131 分割回文串
代码随想录Day22 LeetCode T39 组合总和 T40 组合总和II T131 分割回文串
20 0

热门文章

最新文章