我是一名高中生,对编程比较陌生,正在研究数学问题并使用java来帮助我。无论如何,我遇到了内存问题。我想找到一个没有重复的字符串的所有可能的组合。
例如,给定字符串'AABB',我希望'AABB','ABAB','ABBA','BBAA','BABA'和'BAAB'返回。
这里有一个类似的问题:Every combination of character array
此链接提供的解决方案通常是我想要的,但在我的情况下,它无法处理更长的字符串。在我的具体情况下,我想要一个能够获取18个字符的字符串的方法。
另外我希望找到所有组合的字符串,只需要包含2个字符;所以,可能有一种更有效的方式来做二进制,但我不确定。
非常感谢任何帮助。
答案 0 :(得分:0)
由2个字符组成的长度为18的不同字符串集合数量为2 ^ 18或262,144。
伪代码:
答案 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
}