如果我有两个带有字母的字符串,如何获得其中所有可能的字符组合?
例如,如果我有 i 字符串“abc”和另一个“def”,我如何获得所有组合,例如:
广告
bd be bf ...等等。
组合的第一个字母总是来自第一个字符串,第二个字母来自第二个字符串。
我希望它能够处理多个字符串。它用于文本预测。每个字符串将代表手机键盘上的字母。
public void getCombos(){
String s1 = "abc"
String s2 = "def"
}
通常我会尽量避免嵌套循环,尽管在这种情况下我看不到另一种方式(嗯,不是更好的方式)。
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 上有一些非常好的答案。喜欢这个。
我想到了一个算法,但我不知道如何实现它。
它将是树形结构,其中包括除重复项之外的第一级中的所有字符,您将自上而下打印每一片叶子。
例如我们有 S1="abc", S2="ade" 我们将有类似下面的树:
根据该图像,我们将编写“a”“b”,...,“e”和“aa(仅一次),ca,cb,cd”(两个字符串),这样可以避免重复,并且所有字符串都将被打印出来
尝试嵌套 for,结合 String#toCharArray() 方法
鉴于您的描述,我创建了一个简单的二次算法:
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),然后使用它们来生成字符串。您还可以跟踪使用的每个字符并避免使用它们两次...
无论如何,希望我的示例可以帮助您入门。