字符串所有可能的排列 例如abcd等等 递归算法和排列组合知识结合
2012-12-13 16:59
507 查看
可以用在md5编码等
package test;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import com.eetrust.raf.core.utils.encrypt.SecureMD5;
/**
*
* @author chenhui
*
*/
public class Test2 {
private StringBuilder builder = null;
private static String KEY = "abcdef";
private static String DBPWD = "AzoAMg9rWj";
/**
* @param str
* 字符串str中每个字符都不相同
* @return 字符串str所有可能的排列
*/
public List<String> doCompute(String str) {
List<String> list = new ArrayList<String>();
List<String> temp = null;
if (str.length() == 1) {
list.add(str);
return list;
} else {
char ch = str.charAt(0);
temp = doCompute(str.substring(1));
for (int j = 0; j < temp.size(); j++) {
String s = temp.get(j);
builder = new StringBuilder(s.length() + 1);
// 将ch分别放到s.length() + 1个位置
for (int k = 0; k < s.length() + 1; k++) {
builder.append(s.substring(0, k));
builder.append(ch);
builder.append(s.substring(k, s.length()));
list.add(j, builder.toString());
builder.delete(0, s.length() + 1);
}
}
for (int i = 0; i < temp.size(); i++) {
temp.remove(i);
}
temp = null;
return list;
}
}
private static boolean vString(String str){
//System.out.println("验证过:" + str);
return SecureMD5.passDecrypt(DBPWD,KEY).equals(str);
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Test2 abc = new Test2();
long t1 = System.currentTimeMillis();
List<String> list = abc.doCompute("89123");
long t2 = System.currentTimeMillis();
Collections.sort(list);
long t3 = System.currentTimeMillis();
for (String s : list) {
if (vString(s)) {
System.out.println("::" + s);
return;
}
}
System.out.println(t2 - t1);
System.out.println(t3 - t2);
}
}
package test;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import com.eetrust.raf.core.utils.encrypt.SecureMD5;
/**
*
* @author chenhui
*
*/
public class Test2 {
private StringBuilder builder = null;
private static String KEY = "abcdef";
private static String DBPWD = "AzoAMg9rWj";
/**
* @param str
* 字符串str中每个字符都不相同
* @return 字符串str所有可能的排列
*/
public List<String> doCompute(String str) {
List<String> list = new ArrayList<String>();
List<String> temp = null;
if (str.length() == 1) {
list.add(str);
return list;
} else {
char ch = str.charAt(0);
temp = doCompute(str.substring(1));
for (int j = 0; j < temp.size(); j++) {
String s = temp.get(j);
builder = new StringBuilder(s.length() + 1);
// 将ch分别放到s.length() + 1个位置
for (int k = 0; k < s.length() + 1; k++) {
builder.append(s.substring(0, k));
builder.append(ch);
builder.append(s.substring(k, s.length()));
list.add(j, builder.toString());
builder.delete(0, s.length() + 1);
}
}
for (int i = 0; i < temp.size(); i++) {
temp.remove(i);
}
temp = null;
return list;
}
}
private static boolean vString(String str){
//System.out.println("验证过:" + str);
return SecureMD5.passDecrypt(DBPWD,KEY).equals(str);
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Test2 abc = new Test2();
long t1 = System.currentTimeMillis();
List<String> list = abc.doCompute("89123");
long t2 = System.currentTimeMillis();
Collections.sort(list);
long t3 = System.currentTimeMillis();
for (String s : list) {
if (vString(s)) {
System.out.println("::" + s);
return;
}
}
System.out.println(t2 - t1);
System.out.println(t3 - t2);
}
}
相关文章推荐
- 9.5---所有字符串的排列组合(CC150)
- 给定一个字符串,输出所有的排列组合方式
- 编写一个方法,返回某字符串的所有排列组合。
- 编程列出一个字符串的全字符组合情况,原始字符串中没有重复字符,例如: 原始字符串是"abc",打印得到下列所有组合情况
- 算法--无重复子字符串,返回所有可能排列
- 输入一个字符串,要求输出字符串中字符所有的排列,例如输入"abc",得到"abc","acb","bca","bac","cab","cba"
- 滚雪球思路 计算一个字符串所有可能的排列顺序
- 给一个字符串(包含重复字符),打印它的所有可能的组合。
- 《剑指Offer》读书笔记---面试题28:字符串的排列,(扩展:求字符串的所有组合)
- c# 组合字符串组成密码的所有可能
- 输出字符串的所有排列组合情况
- 使用循环的方式打印字符串所有排列组合
- 9.9递归和动态规划(五)——确定某字符串的所有排列组合
- 输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。 结果请按字母顺序输出。
- 给定一个数组,n个数,打印所有可能的r位数的组合。例如{1,2,3,4}n=4,r=2.输出{1,2}{1,3}{1,4}{2,3}{2,4}{3,4}
- 输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。
- 求一串字符串的全排列和所有组合
- 确定某字符串的所有排列组合
- Swift - 排列组合之全排列 (输入一个字符串,输出该字符串包含的字符的所有组合)
- 字符串的所有可能组合输出