• 1、分割回文串——回溯法


    题目:

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

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

    样例

    给出 s = "aab",返回

    [
      ["aa", "b"],
      ["a", "a", "b"]
    ]
    

    标签 Expand 

    package unit1;
    
    import java.util.ArrayList;
    import java.util.List;
    
    public class Huiwen {
        
        /**检查是否为回文
         * @param s
         * @return
         */
        public static boolean check(String s){
            String s1="";
            char[] c=s.toCharArray();
            /*Character[] ctr=new Character[s.length()];    
            byte[] b=s.getBytes();*/
            for(int i=s.length()-1;i >=0;i--){
                /*System.out.println(b[i]);*/
                c[i]=s.charAt(i);
    //            System.out.println(c[i]);
                s1=s1+c[i];
    //            System.out.println(s1);
            }
            if(s1.equals(s)){
                return true;
            }
            else{
                return false;
            }
                      
        }
        
        /**获取所有不为空的回文子串
         * @param str
         */
        public static void partion(String str){
            String substr="";
            for(int i=0;i<str.length();i++){
                for (int j=i;j<str.length()+1;j++){//注意这里j的取值范围,因为截取函数substring(i,j)包含i不包含j
                    substr=str.substring(i, j);                
                    if(!("".equals(substr))&&check(substr)){//打印所有不为空的回文子串
                        System.out.println("i:"+i+"j:"+j+"substr:"+substr);
                    }
                    
                }
            }
            
        }
        
        /**获取字符串S的回文分割法集合
         * @param s
         * @return
         */
        public static ArrayList<ArrayList<String>> partition(String s) {
            // write your code here
            ArrayList<ArrayList<String>> pLists = new ArrayList<ArrayList<String>>();
              int length = s.length();
              ArrayList<String> array = new ArrayList<String>();
              if (s.length() == 0 || s == null) {
                   pLists.add(array);
                   return pLists;
              }
    
              helper(s, pLists, array, 0);
              return pLists;
        }
       
        public  static void helper(String s, ArrayList<ArrayList<String>> pLists,
                ArrayList<String> array, int start) {
              if (start == s.length()) {
                   pLists.add(array);
                   return;
              }
              for (int i = start; i < s.length(); i++) {
                   if (check(s.substring(start, i + 1))) {
                       ArrayList<String> tmp = new ArrayList<String>(array);
                        tmp.add(s.substring(start, i + 1));
                        helper(s, pLists, tmp, i + 1);
                   }
              }
    
         }
        public static void main(String[] args){
            int flag=2;
            if (flag==1){//获取全部的不为空的回文子字符串
                partion("aab");
            }
            else if (flag==2){//获取S的回文分割方案
                System.out.println(partition("aab"));
            }
            
            
        }
      
    }
  • 相关阅读:
    Git本地操作2
    Blast在windows下的使用过程
    和为T
    出现次数最多的整数
    蓝桥杯 未名湖边的烦恼 java
    蓝桥杯数字三角形 java
    ①①将线性拉伸
    ⑩把线型对象转平面对象
    ⑨矩形
    ⑧建立样条:(样条也能够被拉伸)
  • 原文地址:https://www.cnblogs.com/abc8023/p/4921648.html
Copyright © 2020-2023  润新知