我要求获得给定字符串的所有组合。 例如 我有一个数字字符串和一些特殊的字符
String chars="0123456789@#$%&";
String guessedPw="authentic";
所以我想得到像这样的组合
我应该如何改进我的方法以获得所有组合?
这是我写的代码。
但它并没有给我所有的组合。
private static String combination(String prefix, String s, String pw, String md5Pw) {
String pwFound = "";
if (s.length() > 0) {
// System.out.println(prefix + s.charAt(0) + pw);
String tempPw1 = prefix + s.charAt(0) + pw;
System.out.println("pw1 : " + tempPw1);
if (md5(tempPw1).equals(md5Pw)) {
// String tempPw1;
pwFound = tempPw1;
return pwFound;
}
String tempPw2 = pw + prefix + s.charAt(0);
if (md5(tempPw2).equals(md5Pw)) {
// String tempPw1;
pwFound = tempPw2;
return pwFound;
}
pwFound = combination(prefix + s.charAt(0), s.substring(1), pw, md5Pw);
pwFound = combination(prefix, s.substring(1), pw, md5Pw);
}
return pwFound;
}
答案 0 :(得分:0)
如果你不想写自己的算法,你可以使用google。
尝试搜索:“Generate Permutations”。
例如,在此链接上:Generate all combinations from multiple lists有一个算法可供您使用(但有列表)。
B
但当然,还有很多其他方法。
答案 1 :(得分:0)
如果您想自己编写所有代码,那么这就是您应该如何解决问题=>
有一个特殊的字符说〜表示guessedPw,并创建另一个字符串说str = chars +"〜"。
首先,您需要查找str的所有可能组合,找到指数时间,然后对于每个找到的组合,您应该生成所有它的排列,这也是因子时间复杂。
和然后在最后的字符串中,你应该替换所有出现的'〜'用guessedPw,得到答案字符串。
在这里,您可以找到用于生成排列和组合的链接:
链接:http://www.geeksforgeeks.org/write-a-c-program-to-print-all-permutations-of-a-given-string/
要找出组合,如果你有最大值,你可以使用位掩码。字符串中的64个字符,您要从中提取的组合。
答案 2 :(得分:0)
要创建新组合,您可以添加一个char作为前缀或添加一个char作为后缀。为避免重复,请在后缀存在时停止添加前缀
伪代码:
GenPass(CurrentString, boolAllowPrefix)
check CurrentString, return it if good result
check length limit, exit if too long
for c in Chars
if (boolAllowPrefix)
GenPass(Chars[i] + CurrentString, True)
GenPass(s + Chars[i], False)
Delphi实现检查
procedure GenPass(s: string; bPrefix: Boolean);
var
i: integer;
begin
List.Add(s);
if Length(s) = MaxLen then
Exit;
if bPrefix then
for i := 1 to Length(Chars) do
GenPass(Chars[i] + s, True);
for i := 1 to Length(Chars) do
GenPass(s + Chars[i], False);
端;