字符串的每个组合,不重复java

时间:2015-07-03 22:32:35

标签: java string combinations

我是一名高中生,对编程比较陌生,正在研究数学问题并使用java来帮助我。无论如何,我遇到了内存问题。我想找到一个没有重复的字符串的所有可能的组合。

例如,给定字符串'AABB',我希望'AABB','ABAB','ABBA','BBAA','BABA'和'BAAB'返回。

这里有一个类似的问题:Every combination of character array

此链接提供的解决方案通常是我想要的,但在我的情况下,它无法处理更长的字符串。在我的具体情况下,我想要一个能够获取18个字符的字符串的方法。

另外我希望找到所有组合的字符串,只需要包含2个字符;所以,可能有一种更有效的方式来做二进制,但我不确定。

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:0)

由2个字符组成的长度为18的不同字符串集合数量为2 ^ 18或262,144。

伪代码:

  1. 创建所有可能的长度为18的字符串集(262,144),由2个不同的字符组成
  2. 确定输入字符串
  3. 中类型A的字符数
  4. 确定集合中哪些字符串具有与输入字符串
  5. 类型A相同的字符数
  6. 打印出这些字符串

答案 1 :(得分:0)

 static void perm(char c0, int n0, char c1, int n1, String s, List<String> result) {
     if (n0 < 0 || n1 < 0)
         return;
     else if (n0 == 0 && n1 == 0)
         result.add(s);
     else {
         perm(c0, n0 - 1, c1, n1, s + c0, result);
         perm(c0, n0, c1, n1 - 1, s + c1, result);
     }

 }

 static List<String> perm(char c0, int n0, char c1, int n1) {
     List<String> result = new ArrayList<>();
     perm(c0, n0, c1, n1, "", result);
     return result;
 }

 public static void main(String[] args) {
     System.out.println(perm('A', 2, 'B', 2));
     // -> [AABB, ABAB, ABBA, BAAB, BABA, BBAA]
     System.out.println(perm('A', 8, 'B', 10).size());
     // -> 43758
 }