zoukankan      html  css  js  c++  java
  • 分割回文串(力扣第131题)

    题目:

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

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

    示例:

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

    分析:

      先分析重要的点,第一求的的子串,子串!子串就要求必须是连续的一串字符序列,同时要求每个子串都是回文串,所以需要有一个判断字符串是否是回文串的功能,这个可以单独写成一个函数。那么应该怎么分割出所有的回文串呢?

      首先最坏的情况是,对于一个字符串,其含有的回文子串的长度都是1,也就是将这个字符串分割成一个个由单个字符组成的字符串,它们都是回文串。

      由于子串都是连续的,并且最小的回文串是由单个字符组成的字符串,那我们就从单个字符开始,先切分1个字符,判断是否是回文串,然后如果是,就将切分之后剩下的子串拿去继续递归搜索判断,一直到整个字符串切分完即可。如果最后字符串长度为0,那么就说明整个组合都是回文子串,就将这个组合添加到结果列表中,然后回溯到上一层,开启新一轮的切分,增加原先的切分长度,继续搜索。如果切分的不是回文串,那么就跳过此次切分,继续循环开启新的切分,直到循环结束,还不是回文串的话,那就回溯,更换上一层的切分子串。

    实现的代码如下:

      

     private List<List<String>> reslist;
    
        public List<List<String>> partition(String s) {
    
            if (s == null || s.length() == 0){
                return new ArrayList<>();
            }
    
            reslist = new ArrayList<>();
            List<String> curlist = new ArrayList<>();
    
            findsubStr(s,curlist);
    
            return reslist;
        }
    
        private void findsubStr(String s, List<String> curlist) {
    
            if (s.length() == 0){
                reslist.add(new ArrayList<>(curlist));
                return;
            }
    
    
            for (int j = 0; j < s.length(); j++) {
    
                if (isPalindrome(s,0,j)){
                    curlist.add(s.substring(0,j+1));
                    findsubStr(s.substring(j+1),curlist);
                    curlist.remove(curlist.size()-1);
                }
            }
    
        }
    
        private boolean isPalindrome(String s, int i, int j) {
    
            while (i < j){
                if (s.charAt(i++) != s.charAt(j--)){
                    return false;
                }
            }
            return true;
        }

      

  • 相关阅读:
    python count函数
    kubenetes服务发现
    k8s网络
    k8s创建pod流程
    openstack创建虚拟流程、各组件介绍
    生产者消费者问题
    Date类和Calendar类
    Timer定时器
    Java中的克隆
    注解
  • 原文地址:https://www.cnblogs.com/yxym2016/p/13363465.html
Copyright © 2011-2022 走看看