LeetCode Hot100 131.分割回文串

题目

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

回文串 是正着读和反着读都一样的字符串。

方法灵神-子集型回溯

假设每对相邻字符之间有个逗号,那么就看每个逗号是选还是不选

也可以理解成:是否要把 s[i]s[i]s[i] 当成分割出的子串的最后一个字符。

代码:

class Solution {
    private final List<List<String>> ans = new ArrayList<>();
    private final List<String> path = new ArrayList<>();
    private String s;

    public List<List<String>> partition(String s) {
        this.s = s;
        dfs(0, 0);
        return ans;
    }

    private boolean isPalindrome(int left, int right) {
        while (left < right) {
            if (s.charAt(left++) != s.charAt(right--))
                return false;
        }
        return true;
    }
    // start 表示当前这段回文子串的开始位置
    private void dfs(int i, int start) {
        if (i == s.length()) {
            ans.add(new ArrayList<>(path));
            return;
        }
        
        // 不选 i 和 i + 1 之间的逗号(i = n - 1 时一定要选)
        if (i < s.length() - 1)
            dfs(i + 1, start);
        
        // 选 i 和 i + 1 之间的逗号(把 s[i] 作为子串的最后一个字符)
        if (isPalindrome(start, i)) {
            path.add(s.substring(start, i + 1));
            dfs(i + 1, i + 1);              // 下一个子串从 i+1 开始
            path.remove(path.size() - 1);   // 恢复现场
        }
    }
}

相关推荐

  1. 131. 分割

    2023-12-09 16:52:03       33 阅读
  2. 131. 分割

    2023-12-09 16:52:03       36 阅读
  3. leetcode 131. 分割

    2023-12-09 16:52:03       36 阅读
  4. 131. 分割(中等)

    2023-12-09 16:52:03       36 阅读
  5. 力扣:131. 分割

    2023-12-09 16:52:03       30 阅读

最近更新

  1. TCP协议是安全的吗?

    2023-12-09 16:52:03       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-09 16:52:03       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-09 16:52:03       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-09 16:52:03       18 阅读

热门阅读

  1. 胶囊网络实现手写数字分类

    2023-12-09 16:52:03       35 阅读
  2. git修改commit信息

    2023-12-09 16:52:03       34 阅读
  3. 传世SUN引擎如何安装

    2023-12-09 16:52:03       30 阅读
  4. CoreDNS实战(八)-递归服务器

    2023-12-09 16:52:03       43 阅读
  5. Linux常用命令详解与示例

    2023-12-09 16:52:03       37 阅读
  6. WPF DataGrid 里面的ToggleButton点击不生效

    2023-12-09 16:52:03       41 阅读
  7. csp 如此编码 C语言(回归唠嗑版)

    2023-12-09 16:52:03       29 阅读
  8. 无重复字符的最长子串

    2023-12-09 16:52:03       43 阅读
  9. LintCode 1287 · Increasing Triplet Subsequence (贪心算法)

    2023-12-09 16:52:03       39 阅读
  10. codeforces每日两道思维题(第 四 天)

    2023-12-09 16:52:03       43 阅读
  11. Matlab 镜像变换(2D)

    2023-12-09 16:52:03       36 阅读