leetcode-分割回文串

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

示例 1:

输入:s = "aab"

输出:[["a","a","b"],["aa","b"]]

示例 2:

输入:s = "a"

输出:[["a"]]

提示:

1 <= s.length <= 16

s 仅由小写英文字母组成

思路 :枚举分割的位置。判断分割后的字符串是否为回文串,是就保存当前字符串,继续分割剩下的字符串。
代码

c 复制代码
class Solution {
    public List<List<String>> partition(String s) {
        List<List<String>> res = new ArrayList<>();
        dfs(s, new ArrayList<String>(),res);
        return res;
    }

    public void dfs(String s,List<String> temp, List<List<String>> res){
        if(s.isEmpty()){
            res.add(new ArrayList<>(temp));
            return;
        }

        // 枚举分割位置
        for(int i = 1;i<=s.length();i++){
            String t = s.substring(0,i);
            if(isHuiWen(t)){
                temp.add(t);
                dfs(s.substring(i),temp,res);
                temp.remove(temp.size()-1);
            }
        }

    }
    public boolean isHuiWen(String a){
        if(a.isEmpty()){
            return false;
        }
        int left = 0;
        int right = a.length()-1;
        while(left<right){
            if(a.charAt(left)!=a.charAt(right)){
                return false;
            }
            left++;
            right--;
        }
        return true;
    }
}
相关推荐
代码中介商4 分钟前
红黑树完全指南:从五条性质到完整插入删除实现
数据结构·算法
JieE2126 分钟前
反转链表:从双指针到递归,吃透链表反转的核心逻辑
javascript·算法
玖釉-23 分钟前
旋转图像:从矩阵转置、镜像到坐标变换的系统理解
c++·windows·算法·图形渲染
fengenrong39 分钟前
20260522
算法
一条大祥脚1 小时前
Codeforces Round 1099 (Div. 2) 构造|贪心|图论|还原数组
java·算法·图论
huaCodeA1 小时前
Android面试-Flow相关
android·面试·职场和发展
JAVA社区1 小时前
Java进阶全套教程(三)—— Spring框架核心精讲
java·开发语言·spring·面试·职场和发展·mybatis
Sheldon Chao1 小时前
Lecture 7 基于策略梯度的算法
人工智能·算法·机器学习
始三角龙1 小时前
LeetCode hoot 100 -- 缺失的第一个正整数
算法·leetcode·职场和发展
飞Link2 小时前
深度解析孪生网络(Siamese Network):从原理、技巧到实战应用
算法·数据挖掘·回归