分割回文串(LeetCode第131题)java实现

一、题目描述

给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串。 

 返回 s 所有可能的分割方案。 

 示例: 

 输入: "aab"
输出:
[
  ["aa","b"],
  ["a","a","b"]
] 
二、解题思路

用回溯法,进行dfs,即可。

三、java代码

​
class Solution {
    public List> partition(String s) {
        List> res = new ArrayList<>();
        int n = s.length();
        boolean[][] dp = new boolean[n][n];
        for (int i = 0; i < n; i++) {
            for (int j = 0; j <= i; j++) {
                if (s.charAt(i) == s.charAt(j) && (i - j < 2 || dp[j + 1][i - 1])) dp[j][i] = true;
            }
        }
        dfs(res, dp, 0, n, s, new ArrayList());
        return res;

    }

    private void dfs(List> res, boolean[][] dp, int i, int n, String s, ArrayList tmp) {
        if (i == n) res.add(new ArrayList<>(tmp));
        for (int j = i; j < n; j++) {
            if (dp[i][j]) {
                tmp.add(s.substring(i, j + 1));
                dfs(res, dp, j + 1, n, s, tmp);
                tmp.remove(tmp.size() - 1);
            }
        }
    }
}

​

 

你可能感兴趣的:(LeetCode刷题)