zoukankan      html  css  js  c++  java
  • LeetCode——分割回文串

    Q:给定一个字符串s,分割s使得s的每一个子串都是回文串
    返回所有的回文分割结果。(注意:返回结果的顺序需要和输入字符串中的字母顺序一致。)
    例如:给定字符串s="aab",
    返回
    [↵ ["aa","b"],↵ ["a","a","b"]↵ ]
    A:这道题使用回溯的方法
    注意:

    • list加入array时要用拷贝,不要直接加入,否则之后list变化会导致array中的list变化
    • 加入后记得移除,这才方便走其他支线
        public static ArrayList<ArrayList<String>> partition(String s) {
            ArrayList<ArrayList<String>> array = new ArrayList<>();
            if (s == null || s.isEmpty())
                return array;
            ArrayList<String> list = new ArrayList<>();
            partition_s(array, list, s);
            return array;
        }
    
        public static void partition_s(ArrayList<ArrayList<String>> array, ArrayList<String> list, String s) {
            if (s.length() == 0) {
                //回溯到底了,拷贝list进入array
                array.add(new ArrayList<>(list));
                return;
            }
            int size = s.length();
            for (int i = 1; i <= size; i++) {
                //判断是否是回文
                if (palind(s.substring(0, i))) {
                    //是的话先把当前满足回文的子串放入
                    list.add(s.substring(0, i));
                    //进行回溯
                    partition_s(array, list, s.substring(i));
                    //移除刚刚添加的元素,也就是回到之前的状态,以便走其他分支
                    list.remove(list.size() - 1);
                }
            }
        }
    
        public static boolean palind(String s) {
            StringBuilder s1 = new StringBuilder(s);
            String s2 = s1.reverse().toString();
            return s.equals(s2);
        }
    
  • 相关阅读:
    tomcat设置编码utf8
    servlet详细理解
    设置utf8编码问题
    yarn状态机的可视化
    以卵石游戏(杭州电1527)
    Android Studio虚拟机配置虚拟键盘
    linux网络编程--跳水send和recv
    基于redis AE异步网络架构
    谈加班文化
    ios8加入通知栏开始
  • 原文地址:https://www.cnblogs.com/xym4869/p/12470153.html
Copyright © 2011-2022 走看看