不重复的字符串的每个组合 java
every combination of a string without repeats java
我是一名高中生,对编程还比较陌生,正在研究一道数学题并使用 java 来帮助我。无论如何,我已经 运行 陷入了内存问题。我想找到一个字符串的所有可能组合而不重复。
例如,给定字符串 'AABB' 我想要 'AABB'、'ABAB'、'ABBA'、'BBAA'、'BABA' 和'BAAB' 返回。
这里有一个类似的问题:Every combination of character array
这里 link 提供的解决方案大体上是我想要的,但是在我的情况下它无法处理更长的字符串。在我的具体情况下,我想要一个能够接受一个包含 18 个字符的字符串的方法。
另外我要查找所有组合的字符串,只需要包含2个字符;因此,可能有一种更有效的二进制方式,但我不确定。
如有任何帮助,我们将不胜感激。
由 2 个字符组成的长度为 18 的不同字符串的集合在数量上为 2^18 或 262,144。
伪代码:
- 创建由 2 个不同字符组成的长度为 18 的所有可能字符串的集合 (262,144)
- 确定输入字符串中类型A的字符个数
- 确定集合中哪些字符串与输入字符串具有相同数量的 A 类型字符
- 打印出这些字符串
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
}
我是一名高中生,对编程还比较陌生,正在研究一道数学题并使用 java 来帮助我。无论如何,我已经 运行 陷入了内存问题。我想找到一个字符串的所有可能组合而不重复。
例如,给定字符串 'AABB' 我想要 'AABB'、'ABAB'、'ABBA'、'BBAA'、'BABA' 和'BAAB' 返回。
这里有一个类似的问题:Every combination of character array
这里 link 提供的解决方案大体上是我想要的,但是在我的情况下它无法处理更长的字符串。在我的具体情况下,我想要一个能够接受一个包含 18 个字符的字符串的方法。
另外我要查找所有组合的字符串,只需要包含2个字符;因此,可能有一种更有效的二进制方式,但我不确定。
如有任何帮助,我们将不胜感激。
由 2 个字符组成的长度为 18 的不同字符串的集合在数量上为 2^18 或 262,144。
伪代码:
- 创建由 2 个不同字符组成的长度为 18 的所有可能字符串的集合 (262,144)
- 确定输入字符串中类型A的字符个数
- 确定集合中哪些字符串与输入字符串具有相同数量的 A 类型字符
- 打印出这些字符串
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
}