字符串的全排列JAVA实现

package com.kpp;

/**
 * 求字符串的全排列
 * 递归的思想
 * 比如  abcde  先求出abcd的全排列,然后将e分别插入全排列的5个位置
 * a 全排列  a
 * ab 全排列  ab ba
 * abd 全排列即是  cab acb abc cba bca bac
 * 
 * @author kpp
 *
 */
public class QuanPaiLie {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        String str = "abcde";
        
        //System.out.println(str.substring(0, 2));
        String[] rs = getQuanPaiLie(str);
        if(rs != null){
            int count = 0;
            for(int i = 0;i < rs.length;i++){
                if(rs[i]!=null){
                    System.out.println(rs[i]);
                    count++;
                }
                
            }
            System.out.println("count: "+count);
        }
        
    }
    /**
     * 求一个字符串的全排列
     * @param str
     * @return
     */
    public static String[] getQuanPaiLie(String str){
        String[] rs = new String[1000];
        
        if(str == null||str.isEmpty()){
            return null;
        }
        int strLen = str.length();
        if(strLen == 1){
            rs[0] = str;
            
        }else if(strLen == 2){
            rs[0] = str;
            rs[1] = ""+str.charAt(1)+str.charAt(0);
            
        }else if(strLen > 2){
            char c = str.charAt(strLen-1);
            String strBefore = str.substring(0,strLen-1);
            String[] tmpRsArr = getQuanPaiLie(strBefore);
            int count = 0;
            for(int i = 0;i < tmpRsArr.length;i++){
                
                String tmpRs = tmpRsArr[i];
                if(tmpRs != null){
                    for(int k = 0;k < tmpRs.length()+1;k++){
                        rs[count++] = tmpRs.substring(0,k)+c+tmpRs.substring(k,tmpRs.length());
                    }
                }
                
                
                
            }
            
        }
        
        return rs;
    }

}

 

posted @ 2015-04-01 23:17  kpp  阅读(2292)  评论(0编辑  收藏  举报