美文网首页
131.分割回文串

131.分割回文串

作者: youzhihua | 来源:发表于2019-12-19 15:51 被阅读0次

    题目描述

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

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

    示例:
    输入

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

    思路

    1. 使用回溯算法求解。

    2.画出递归树(图片来自https://leetcode-cn.com/u/liweiwei1419/)。

    3.根据递归树进行剪枝和递归操作即可。

    Java代码实现

        public List<List<String>> partition(String s) {
            if(s.length() == 0)
                return new ArrayList<>();
            List<List<String>> res = new ArrayList<>();
            List<String> cur = new ArrayList<>();
            partition(s,0,s.length()-1,res,cur);
            return res;
        }
    
        private void partition(String s,int left,int right,List<List<String>> res,List<String> cur){
            if(left > right){
                res.add(new ArrayList<>(cur));
                return ;
            }
            for(int i=left;i<=right;i++){
                if(!judgePalindrome(s,left,i))
                    continue;
                cur.add(s.substring(left,i+1));
                partition(s,i+1,right,res,cur);
                cur.remove(cur.size()-1);
            }
        }
    
    
        private boolean judgePalindrome(String s,int left,int right){
            while(left < right){
                if(s.charAt(left) != s.charAt(right))
                    return false;
                left++;
                right--;
            }
            return true;
        }
    

    相关文章

      网友评论

          本文标题:131.分割回文串

          本文链接:https://www.haomeiwen.com/subject/gcomnctx.html