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

相关推荐
AI服务老曹23 分钟前
车牌识别算法接入AI视频分析平台的流程和误报优化
人工智能·算法·音视频
神威难绷泪40 分钟前
Linux应用软件编程:线程分离属性 互斥机制 同步机制 死锁
linux·开发语言·算法·线程
小星星闪亮登场1 小时前
图论--最小生成树(内含二分图)
数据结构·算法·图论·迭代加深·图搜索算法
ZC跨境爬虫1 小时前
LeetCode 219. 存在重复元素 II(滑动窗口 + 哈希表详解)
算法·leetcode·散列表
吞下星星的少年·-·1 小时前
The 2025 ICPC Asia East Continent Online Contest (I) A题(模拟+贪心)
算法·贪心·模拟
小程序设计2 小时前
【机械设计】磁粉检测机器人的设计与验证
算法·机器人
Navigator_Z2 小时前
LeetCode //C - 1220. Count Vowels Permutation
c语言·算法·leetcode
吃好睡好便好2 小时前
判断函数的使用
学习·算法·matlab·生活·判断函数
2601_956121972 小时前
线性DP(入门)
c++·算法·动态规划
feilieren2 小时前
leetcode - 389. 找不同
算法·leetcode