小明思考

          Just a software engineer
          posts - 124, comments - 36, trackbacks - 0, articles - 0
            BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理
          問(wèn)題給定一個(gè)字符串s,切割字符串使得每個(gè)子串都是回文的。(比如aba,對(duì)稱)
          要求返回所有可能的分割。

          比如,對(duì)于字符串s="aab",
          返回:

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


          分析:
          這個(gè)一個(gè)典型的可以用遞歸來(lái)解決問(wèn)題,對(duì)于字符串s,先找出第一段回文字符串,然后遞歸的調(diào)用自己來(lái)切割余下的部分。

          private boolean isPalindrome(String s){
                  int len = s.length();
                  if(len>1){
                      for(int i=0;i<len/2;++i){
                          if(s.charAt(i)!=s.charAt(len-i-1)){
                              return false;
                          }
                      }
                  }
                  return true;
              }
              
              public ArrayList<ArrayList<String>> partition(String s) {
                  ArrayList<ArrayList<String>> result = new ArrayList<ArrayList<String>>();
                  if(isPalindrome(s)){
                      ArrayList<String> as = new ArrayList<String>();
                      as.add(s);
                      result.add(as);
                  }
                  
                  int len= s.length();
                  for(int i=1;i<len;++i){
                      String ss = s.substring(0,i); //find the first part
                      if(isPalindrome(ss)){
                          ArrayList<ArrayList<String>> subResult = partition(s.substring(i)); //partition the remain part
                          for(ArrayList<String> as:subResult){
                              ArrayList<String> newas = new ArrayList<String>();
                              newas.add(ss);
                              newas.addAll(as);
                              result.add(newas);
                          }
                      }
                  }
                  
                  return result;
              }
          主站蜘蛛池模板: 宁远县| 庄浪县| 龙里县| 福建省| 滦南县| 陕西省| 嵊泗县| 临沂市| 织金县| 潼关县| 沁源县| 阳原县| 乐平市| 沈丘县| 荔波县| 皮山县| 青浦区| 化州市| 永春县| 临西县| 城市| 河池市| 柘城县| 东海县| 米泉市| 安顺市| 界首市| 图木舒克市| 清流县| 贡嘎县| 孙吴县| 江油市| 闻喜县| 剑河县| 达尔| 乌拉特前旗| 永川市| 琼结县| 定结县| 阜城县| 南昌市|