小明思考

Just a software engineer
posts - 124, comments - 36, trackbacks - 0, articles - 0
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

回文字符串的切割问题2

Posted on 2013-04-15 13:52 小明 阅读(1497) 评论(0)  编辑  收藏 所属分类: 数据结构和算法
问题给定一个字符串s,切割字符串使得每个子串都是回文的。(比如aba,对称)
要求返回所有可能的分割。

比如,对于字符串s="aab",
返回:

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


分析:
这个一个典型的可以用递归来解决问题,对于字符串s,先找出第一段回文字符串,然后递归的调用自己来切割余下的部分。

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;
    }

只有注册用户登录后才能发表评论。


网站导航: