【算法三十六】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)

相关推荐
血色橄榄枝2 小时前
基于用户注册信息的关键词检测挑战赛「Datawhale AI 夏令营」
人工智能·算法·机器学习
c238563 小时前
第二篇:《测试指挥官:可视化单题自测框架(含 assert 实操)》
java·数据库·c++·算法·安全性测试
六点_dn4 小时前
Linux学习笔记-printf命令
linux·运维·算法
遥感知识服务5 小时前
Sentinel-1 + DEM + FwDET + 随机森林:从快速水深初估到多因子误差修正
算法·随机森林·sentinel
来一碗刘肉面5 小时前
顺序表与链表的比较
数据结构·算法·链表
alphaTao5 小时前
LeetCode 每日一题 2026/7/13-2026/7/19
算法·leetcode
nnerddboy5 小时前
脑电信号处理实战 03 | 运动想象脑机接口入门:ERD/ERS、CSP 空间滤波与左右拳想象解码
算法·信号处理
QN1幻化引擎7 小时前
Dalin L — 我造了一门支持中文编程的语言,完整移植到 Rust 了
人工智能·算法·机器学习
Rainy Blue8837 小时前
C转C++速成
c语言·c++·算法
txzrxz7 小时前
二分图详解
数据结构·c++·算法·图论·深度优先搜索·二分图染色