如果我有一个字符串,说“ABCDE”,那么获得两者组合的最佳方法是什么?是否有用于此类任务的 API?
IE
- “AB”
- “交流”
- “广告”
- “AE”
- “公元前”
- “BD”
- “是”
- “光盘”
- “行政长官”
- “德”
如果我有一个字符串,说“ABCDE”,那么获得两者组合的最佳方法是什么?是否有用于此类任务的 API?
IE
没有 API。最好的阅读来源是 Knuth “The Art of Computer Programming Vol 1”或类似的内容:
private static List<String> getCombinations(String input) {
ArrayList<String> result = new ArrayList<String>();
int len = input == null ? 0 : input.length();
for (int i = 0; i < len - 1; i++) {
for (int j = i + 1; j < len; j++) {
String combination = String.valueOf(input.charAt(i))
+ input.charAt(j);
System.out.println("adding: " + combination);
result.add(combination);
}
}
return result;
}
为getCombinations("ABCDE");
adding: AB
adding: AC
adding: AD
adding: AE
adding: BC
adding: BD
adding: BE
adding: CD
adding: CE
adding: DE
i+1伪代码:
String alphabet = "ABCDE";
for( int i = 0; i < alphabet.getLength(); i++){
for( int j = alphabet.getLength(); j > i; j--){
System.out.println( alphabet.substring(i, i+1) + alphabet.substring(j, j+1) );
}
}
如果您需要更多组合,例如:BA CA 等等,因为只有 2 个字母,您可以切换它们的位置并将此过程的结果附加到生成的对中。如果您需要三个等的组合,请查看置换算法。