当前位置:   article > 正文

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

给你一个字符串 s,请你将 s 分割成一些子串,使每个子串都是 回文串 。返回 s 所有

题目:

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

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

样例

给出 s = "aab",返回

  1. [
  2. ["aa", "b"],
  3. ["a", "a", "b"]
  4. ]

标签 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"));
        }
        
        
    }
  
}

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/676760
推荐阅读
相关标签
  

闽ICP备14008679号