当前位置: 首页 > 图灵资讯 > 技术篇> #yyds干货盘点# LeetCode程序员面试金典:分割回文串

#yyds干货盘点# LeetCode程序员面试金典:分割回文串

来源:图灵教育
时间:2023-06-15 09:30:45

题目:

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

回文串 是正读和反读相同的字符串。

示例 1:

输入:s = "aab"

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

示例 2:

输入:s = "a"

输出:[[[”a"]]

代码实现:

class Solution {    boolean[][] f;    List<List<String>> ret = new ArrayList<List<String>>();    List<String> ans = new ArrayList<String>();    int n;    public List<List<String>> partition(String s) {        n = s.length();        f = new boolean[n][n];        for (int i = 0; i < n; ++i) {            Arrays.fill(f[i], true);        }        for (int i = n - 1; i >= 0; --i) {            for (int j = i + 1; j < n; ++j) {                f[i][j] = (s.charAt(i) == s.charAt(j)) && f[i + 1][j - 1];            }        }        dfs(s, 0);        return ret;    }    public void dfs(String s, int i) {        if (i == n) {            ret.add(new ArrayList<String>(ans));            return;        }        for (int j = i; j < n; ++j) {            if (f[i][j]) {                ans.add(s.substring(i, j + 1));                dfs(s, j + 1);                ans.remove(ans.size() - 1);            }        }    }}