Saturday, January 25, 2014

Palindrome Partitioining LeetCode

这个题是最典型的DFS问题,无奈我对DFS掌握的实在不怎么样。这个题很有可能面试的时候联系Trie问一问,我一定要看下Trie,稍后发总结。

要点: temp当中存的就是没一个DFS伸到最深处,然后把结果存到result里面。

时间复杂度为O(n^2)

public ArrayList<ArrayList<String>> partition(String s) {
        ArrayList<ArrayList<String>> result = new ArrayList<ArrayList<String>>();
        ArrayList<String> temp = new ArrayList<String>();
       
        findPartition(s,0,temp,result);
        return result;
    }
   
    public void findPartition(String s, int begin, ArrayList<String> temp,
        ArrayList<ArrayList<String>> result){
            int len = s.length();
            if (begin >= len) {
                ArrayList<String> copy = new ArrayList<String>();
                for (int j = 0; j < temp.size(); j++){
                    copy.add(temp.get(j));
                }
                result.add(copy);
            }
           
            for (int i = begin; i < len; i++){
                if (isPalindrome(s, begin, i)) {
                    temp.add(s.substring(begin, i+1));
                    findPartition(s, i+1, temp, result);
                    temp.remove(temp.size() - 1);
                }
            }
    }
   
    public boolean isPalindrome(String s, int begin, int end){
        while (begin < end) {
            if (s.charAt(begin++) != s.charAt(end--)) return false;
        }
        return true;
    }

No comments:

Post a Comment