打印出所有可能的字符串组合

时间:2013-01-02 01:27:12

标签: java

public static void combinations(String s) {
    char[] original = s.toCharArray();
    int original_size = s.length();

    String temp = new String();
    for (int i = 0; i < original_size; i++) {// add the first element
        String sb = "";
        temp = "";
        sb = "" + original[i];
        temp = sb.toString();

        System.out.println(sb);
        for (int j = i + 1; j < original_size; j++) {// add the other
                                                        // element in the
                                                        // array
            if (i == j)
                continue;
            sb = temp + "" + original[j];
            System.out.println(sb);
        }
        // sb = "";
    }
}

public static void main(String[] args) {
    combinations("abc");
}

结果应该是: a,ab,ac,abc,b,bc,c

但我的计划是: a,ab,ac,b,bc,c。我无法打印出abc

2 个答案:

答案 0 :(得分:1)

如果您的输出应该是a, ab, ac, abc, b, bc, c,那么它实际上不是所有字母的组合,因为它还必须包含cacb等。我想您正在尝试找到这些组合但是按照给定的字符串顺序。下面的方法将能够找到您要做的事情。只需致电orderedCombinations("abc")

public static void orderedCombinations(String s) {
    for(int i = 0; i < s.length(); i++) {
        for(String s1 : subStrings(s.substring(i + 1))) {
            System.out.println(s.charAt(i) + s1);
        }
    }
}

public static String[] subStrings(String s) {
    ArrayList<String> strs = new ArrayList<String>();
    strs.add("");
    for(int i = 0; i < s.length(); i++) {
        for(int j = i + 1; j < s.length() + 1; j++)
            strs.add(s.substring(i, j));
    }

    return strs.toArray(new String[0]);
}

答案 1 :(得分:0)

注意到你有两个for循环,但只需要一个就可以从A-Z获得所有可能的组合。但是您列出的组合并非所有可能的字符串组合。

这种可能性是a,ab,ac,abc,acb,b,ba,bc,bac,bca,c,ca,cb,cba,cab

既然你决定围绕for循环构建你的程序,答案就在于你需要第三个循环来代替三个字符,而不仅仅是两个,但没有一个明确的目标来实现你的程序的目标,我可以重写一个例子。

我建议你重新开始,在玩代码以获得语法感觉时,尝试在示例中更有效地编写代码。 original_size是一个无用的变量,例如,你可以使用s.length。