【算法三十六】131. 分割回文串

131. 分割回文串

回溯:

java 复制代码
class Solution {
    public List<List<String>> partition(String s) {
        List<List<String>> ans = new ArrayList<>();
        List<String> path = new ArrayList<>();
        backtrack(s,ans,path,0);
        return ans;
    }

    //回溯:
    //终止条件
    //非终止条件:
    //子问题 当前操作(要做什么) 下一个子问题是什么 恢复现场 
    private void backtrack(String s,List<List<String>> ans,List<String> path,int l){
        if(l==s.length()){
            //一定要复制,因为path是一块可以反复擦用的黑板,不然最后就是空的
            ans.add(new ArrayList<>(path));
            return;
        }
        for(int r=l;r<s.length();r++){
            if(palindrome(s,l,r)){
                path.add(s.substring(l,r+1));
                backtrack(s,ans,path,r+1);
                path.remove(path.size() - 1);
            }
        }
    }

    private boolean palindrome(String s,int l,int r){
        while(l<r){
            if(s.charAt(l)!=s.charAt(r)){
                return false;
            }
            l++;
            r--;
        }
        return true;
    }
}

时间复杂度:O(N*2^N) N是字符串长度

空间复杂度:O(N)

相关推荐
Yzzz-F6 小时前
Problem - 2146D1 - Codeforces &&Problem - D2 - Codeforces
算法
Kk.08026 小时前
力扣 LCR 084.全排列||
算法·leetcode·职场和发展
环黄金线HHJX.7 小时前
龙虾钳足启发的AI集群语言交互新范式
开发语言·人工智能·算法·编辑器·交互
Omics Pro7 小时前
虚拟细胞:开启HIV/AIDS治疗新纪元的关键?
大数据·数据库·人工智能·深度学习·算法·机器学习·计算机视觉
旖-旎7 小时前
分治(快速选择算法)(3)
c++·算法·leetcode·排序算法·快速选择
_日拱一卒7 小时前
LeetCode:合并区间
算法·leetcode·职场和发展
汀、人工智能7 小时前
[特殊字符] 第3课:最长连续序列
数据结构·算法·数据库架构·图论·bfs·最长连续序列
少许极端7 小时前
算法奇妙屋(四十一)-贪心算法学习之路 8
学习·算法·贪心算法
Kethy__7 小时前
计算机中级-数据库系统工程师-数据结构-图
数据结构·算法·软考··数据库系统工程师·计算机中级
亿秒签到8 小时前
L2-007 家庭房产
数据结构·c++·算法