我需要得到一个字符串的所有排列,但是有一个转折。我需要得到排列,但长度不同。像这样: AB 的排列将是:
一个
乙
AA
BB
AB
文学学士
我可以获得具有固定长度的字符串的排列,但我坚持这一点。
我需要得到一个字符串的所有排列,但是有一个转折。我需要得到排列,但长度不同。像这样: AB 的排列将是:
一个
乙
AA
BB
AB
文学学士
我可以获得具有固定长度的字符串的排列,但我坚持这一点。
public void processPermutations(String s) {
for (int i=1; i<s.length; i++) {
String substring = s.substring(0, i);
// Generate and process the permutations of the substring here...
}
}
你可以这样做:
public List<String> getPermutations(String s) {
List<String> result = new ArrayList<String>();
if (s.length() > 1) {
for (int i = 0; i < s.length(); i++) {
//Create a string that has all the characters of s except the ith one
String smallerString = s.substring(0,i) + s.substring(i + 1, s.length());
result.addAll(getPermutations(smallerString));
//Get permutations involving a single character appearing multiple times,
//ie. AA, AAA, AAAA, etc.
String repeatString = new String();
for (int j = 1; j <= s.length(); j++) {
repeatString = repeatString + s.charAt(i);
result.add(repeatString);
}
}
}
//Add all the permutations using all the string's characters to the list here.
return result;
}
但是,尽量不要考虑它的复杂性;)
您必须首先将字符串的组合放入数量递减的存储桶中,然后在每个组合存储桶上进行置换。例如,如果您的字符串有 3 个字符:
“ABC”的组合选择 3 = 1 “ABC”的组合选择 2 = 3 “ABC”的组合选择 1 = 3
因此,您需要找到这 7 种情况中每一种情况的排列。在伪代码中:
int lenString = s.length
int[] all_permutations = new array
for( buckets = 1 to lenString ){
int[] c = Combinations( s, buckets )
int[] p = Permutations( c )
all_permutations += p
}