如果我有两个带字母的字符串,我如何获得其中所有可能的字符组合?
例如,如果我有字符串“abc”和另一个“def”,我如何获得所有组合,如:
广告 AE AF
BD 是 等...等等。
组合的第一个字母始终来自第一个字符串,第二个字母来自第二个字符串。
我希望它能够使用多个字符串。它用于文本预测。每个字符串将代表手机键盘上的字母。
public void getCombos(){
String s1 = "abc"
String s2 = "def"
}
答案 0 :(得分:1)
通常情况下我会尝试避免嵌套循环,但在这种情况下我没有看到另一种方式(好吧,不是更好的方法)。
char[] s1array = s1.toCharArray();
char[] s2array = s2.toCharArray();
for(char s1char : s1array) {
for(char s2char : s2array) {
String value = String.valueOf(s1char) + String.valueOf(s2char);
System.out.println(value);
}
}
修改强>
为了获得单个字符:
char[] s1array = s1.toCharArray();
char[] s2array = s2.toCharArray();
for(char s1char : s1array) {
for(char s2char : s2array) {
String value = String.valueOf(s1char) + String.valueOf(s2char);
System.out.println(value);
}
System.out.println(String.valueOf(s1char));
}
for(char s2char : s2array) {
System.out.println(String.valueOf(s2char));
}
修改2
如果您想使用所有组合,Stackoverflow上有一些非常好的答案。 Like this one
答案 1 :(得分:0)
尝试嵌套for,结合String#toCharArray()方法
答案 2 :(得分:0)
根据您的描述,我创建了一个简单的二次算法:
public static void combine(String s1, String s2) {
for(int i = 0; i < s1.length(); i++) {
System.out.println(s1.charAt(i));
for(int j = 0; j < s2.length(); j++) {
System.out.println(String.format("%s%s", s1.charAt(i), s2.charAt(j)));
}
}
}
如果您需要避免重复,可以将字符插入集合(请参阅HashSet),然后使用它们生成字符串。您还可以跟踪所使用的每个字符,并避免使用它们两次......
无论如何,希望我的例子可以帮助你开始。
答案 3 :(得分:0)
我想过一个算法,但我不知道如何实现它。
它将是树形结构,其中包括第一级中除重复之外的所有字符,您将自上而下打印每一片叶子。
例如我们有S1 =“abc”,S2 =“ade”我们会有类似下面的树:
根据那张图片,我们会写“a”“b”,...,“e”和“aa(只有一次),ca,cb,cd”(两个字符串),这将拯救我们来自重复,所有字符串都将打印出来