-4

如果我有两个带有字母的字符串,如何获得其中所有可能的字符组合?

例如,如果我有 i 字符串“abc”和另一个“def”,我如何获得所有组合,例如:

广告

bd be bf ...等等。

组合的第一个字母总是来自第一个字符串,第二个字母来自第二个字符串。

我希望它能够处理多个字符串。它用于文本预测。每个字符串将代表手机键盘上的字母。

public void getCombos(){

String s1 = "abc"
String s2 = "def"

}
4

4 回答 4

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 上有一些非常好的答案。喜欢这个

于 2013-04-29T19:54:19.270 回答
0

我想到了一个算法,但我不知道如何实现它。

它将是树形结构,其中包括除重复项之外的第一级中的所有字符,您将自上而下打印每一片叶子。

例如我们有 S1="abc", S2="ade" 我们将有类似下面的树:在此处输入图像描述

根据该图像,我们将编写“a”“b”,...,“e”和“aa(仅一次),ca,cb,cd”(两个字符串),这样可以避免重复,并且所有字符串都将被打印出来

于 2013-04-29T20:18:46.383 回答
0

尝试嵌套 for,结合 String#toCharArray() 方法

于 2013-04-29T19:55:12.667 回答
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),然后使用它们来生成字符串。您还可以跟踪使用的每个字符并避免使用它们两次...

无论如何,希望我的示例可以帮助您入门。

于 2013-04-29T20:08:10.470 回答