267. Palindrome Permutation II

Posted 我的名字叫周周

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了267. Palindrome Permutation II相关的知识,希望对你有一定的参考价值。

    /*
     * 267. Palindrome Permutation II 
     * 2016-3-13 by Mingyang
     * Given a string s, return all the palindromic permutations (without duplicates) of it. Return an empty list if no palindromic permutation could be form.
     * Given s = "aabb", return ["abba", "baab"].
     * Given s = "abc", return [].
     * 这道题目就相对来说简单多了,就跟permutation II类似,如果不写那个比较重要的判断句,那么久会出现很多的重复的。整题原理就是找到所有的组合可能性,再选择其中合适的
     * 1.长度标准:无(固定)
     * 2.可选的范围:对于一个array的所有permutation,这个array有重复(所以多了一句判断句),而且前后可以颠倒(所以用visited)。具体参考permutation II
     * 3.往前走一步:sb加入这个数,visited改为true
     * 4.后退一步:sb减去,visited改为false
     * 5.特别的case:到了长度检查。
     * 6.关于重复:因为可以有重复aabb可能会有abba和abba,第一个a在第一个,第二个a在第二个
     */
     public static List<String> generatePalindromes(String s) { 
         List<String> res=new ArrayList<String>();
         boolean[] visited=new boolean[s.length()];
         char[] model=s.toCharArray();
         StringBuffer sb=new StringBuffer();
         dfs(res,model,visited,sb);
         return res;
     }
     public static void dfs(List<String> res,char[] model,boolean[] visited,StringBuffer sb){
         if(sb.toString().length()==model.length){
             if(isPalindrome(sb.toString())){
                 res.add(sb.toString());
             }
             return;
         }
         for(int i=0;i<model.length;i++){
             if (i > 0 && !visited[i - 1] && model[i] == model[i - 1]) // 这个非常的重要!!!!!!!!!!
                 continue;
             if(!visited[i]){
                 sb.append(model[i]);
                 visited[i]=true;
                 dfs(res,model,visited,sb);
                 visited[i]=false;
                 sb.deleteCharAt(sb.length()-1);
             }
         }
     }

 

以上是关于267. Palindrome Permutation II的主要内容,如果未能解决你的问题,请参考以下文章

java 267. Palindrome Permutation II.java

java 267. Palindrome Permutation II.java

java 267. Palindrome Permutation II.java

java 267. Palindrome Permutation II.java

java 267. Palindrome Permutation II.java

267. Palindrome Permutation II