--- 算法 分割回文串 回溯 + 动态规划预处理 ---

题目解释的特别清楚了,不过还有个,因为只有一个字母也叫回文串,那么其实所有的字母都会被使用到

那么要不重复的遍历一遍字符串的所有子串,并且要记录下每个子串,递归回溯就很适合

不过这样每次递归到一个子串,就去判断他是否为回文串,那么时间复杂度肯定要高到天上了,

而其实对于回文串,有 如果 l ,r 是一个回文串 那么他们的 l + 1, r - 1 也肯定是一个回文串, 对于单个字符 会发现 l + 1 > r - 1 那么这种特殊情况可以直接处理为 是回文串

那么就可以发现一个式子 dpij = si == sj && dpi + 1j -1

我靠这不是动态规划吗, 没错 可是使用动态规划来预处理字符串来将所有的回文串记录到dp表中 这样O(1) 的复杂度下就能判断是否为回文串了

所以这题解法式 动态规划预处理 + 递归回溯遍历所有子字符串

java 复制代码
 List<List<String>> ans = new ArrayList<>();
    List<String> path = new ArrayList<>();
    boolean[][] dp;
    public  List<List<String>>partition(String s) {
        int n = s.length();
        dp = new boolean[n][n];

        for(int i = 0; i < n; i++){
            Arrays.fill(dp[i], true);
        }

        Set<String> set = new HashSet<>();
        //  预处理 从下向上 左往右 相同的位置因为l+1会越界,就不取反正都为true
        for(int l = n - 1; l >= 0; l--){
            for(int r = l + 1; r < n; r++){
                dp[l][r] = s.charAt(l) == s.charAt(r) && dp[l + 1][r - 1];               
            }
        }

        // 递归所有可能 然后找打可能的组合 用dp来判断是否是回文串
        dfs(s, 0);
        return ans;
    }

    void dfs(String ss, int l){
        if(l == ss.length()){
            ans.add(new ArrayList(path));
            return;
        }
        
        for(int r = l; r < ss.length(); r++){
            if(dp[l][r]){
                path.add(ss.substring(l, r + 1));
                dfs(ss, r + 1);
                path.remove(path.size() - 1);
            }
        }
    }

还是挺有意思居然用了俩种算法

相关推荐
ZhengEnCi9 小时前
GPT-6 Astra 爆改 Qwen 权重真有那么神吗:权重空间编程 0.016% 参数的真相
算法·架构
罗西的思考9 小时前
【轻量化复刻大模型 / KIMI K3】KDA(Kimi Delta Attention):并行
人工智能·算法·机器学习
夜不会漫长11 小时前
C++:红黑树
数据结构·算法
AI备案指南-满满12 小时前
算法备案审核不通过,一般是什么原因?
java·人工智能·算法·大模型备案·算法备案·大模型登记
Ramble_Naylor12 小时前
Rust深度解读:Send 与 Sync 的本质与线程安全边界
python·算法·rust
秋天的怀念_David12 小时前
算法一千零一夜 · 第二十三夜 电力民生写成的曲线
java·程序人生·算法
不一样的故事12612 小时前
NB/T 47013.8-2015 附录D 吸枪技术
人工智能·经验分享·算法
通问AI12 小时前
用 200 行 Python 给文档库做「上下文完整度」自检:四个可复算的检查项
算法
揽星河..13 小时前
【C语言】扫雷游戏
c语言·算法·游戏
丘山录13 小时前
本地部署 LongCat-2.5,要 7 台机器我只有 4 台
人工智能·算法