字符串的全排列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;
}
}
以上是 字符串的全排列JAVA实现 的全部内容, 来源链接: utcz.com/z/395130.html