码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2015-10-29 21:36:59      阅读:192      评论:0      收藏:0      [点我收藏+]

标签:

题目:

给定一个字符串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"));
        }
        
        
    }
  
}

 

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

标签:

原文地址:http://www.cnblogs.com/abc8023/p/4921648.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!