剑指 Offer II 086. 分割回文子字符串

Posted 易小顺

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了剑指 Offer II 086. 分割回文子字符串相关的知识,希望对你有一定的参考价值。

算法记录

LeetCode 题目:

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


思路


说明

一、题目

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

二、分析

  • 需要在当前已经成立的情况下去继续的寻找字串的结果,也就是递归回溯问题。
  • 在遇到字符串的结尾位置时进行一次遍历保存即可。
  • 题目中出现的字符全是小写字母也就是简化了回文串的判断。
class Solution 
    private List<List<String>> ans = new ArrayList();
    public String[][] partition(String s) 
        LinkedList<String> tem = new LinkedList();
        dfs(tem, s, 0, s.length());
        String[][] res = new String[ans.size()][];
        for(int i = 0; i < ans.size(); i++) 
            res[i] = ans.get(i).toArray(new String[0]);
        
        return res;
    

    private void dfs(LinkedList<String> tem, String s, int start, int end) 
        if(start == end) 
            ans.add(new ArrayList(tem));
            return;
        
        for(int i = start; i < end; i++) 
            if (isPalindrome(s.substring(start, i + 1))) 
                tem.add(s.substring(start, i + 1));
                dfs(tem, s, i + 1, end);
                tem.remove(tem.size() - 1);
            
        
    

    private boolean isPalindrome(String s) 
        if(s.length() == 1) return true;
        for(int i = 0, j = s.length() - 1; i < j; i++, j--) 
            if(s.charAt(i) != s.charAt(j)) return false;
        
        return true;
    


总结

熟悉深度优先搜索的方程定义。

以上是关于剑指 Offer II 086. 分割回文子字符串的主要内容,如果未能解决你的问题,请参考以下文章

剑指 Offer II 020. 回文子字符串的个数

剑指 Offer II 020. 回文子字符串的个数

剑指 Offer II 020. 回文子字符串的个数

Java每日一题——>剑指 Offer II 027. 回文链表

LeetCode Algorithm 剑指 Offer II 027. 回文链表

LeetCode Algorithm 剑指 Offer II 027. 回文链表