如何在Java中获得不同的组合

时间:2012-04-18 13:10:56

标签: java string api combinations

如果我有一个字符串,说“ABCDE”,那么获得两个组合的最佳方法是什么?这样的任务有API吗?

  1. “AB”
  2. “AC”
  3. “AD”
  4. “AE”
  5. “BC”
  6. “BD”
  7. “BE”
  8. “CD”
  9. “CE”
  10. “DE”

3 个答案:

答案 0 :(得分:1)

没有API。阅读的最佳来源是Knuth“The Computer of Computer Programming Vol 1”或类似内容:

http://webhome.csc.uvic.ca/~haron/CoolCocoon.pdf

答案 1 :(得分: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

答案 2 :(得分:0)

1 + 1pseudocode:

    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个字母,您可以切换它们的位置,并将此过程的结果附加到生成的对。如果你需要三个组合等等,那么看看排列算法。