使用Java生成所有单词

时间:2010-04-20 07:59:43

标签: java string

我想知道如何使用指定字符和长度

的java生成所有单词
String first[]={"a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"};
String second[]={"a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"};
String ch ="";  
String total[];

for(int i = 0;i<26;i++) {
    for(int j = 0;j<26;j++) {
        ch+=first[i]+first[j];
        System.out.println(ch);
    }
}

我只得到这个节目的576个单词,但是26个!单词是4.03291461×10 ^ 26

如何用java编写程序?

4 个答案:

答案 0 :(得分:8)

public class Words {
    static char[] alphabet = "abcdefghijklmnopqrstuvwxyz".toCharArray();

    static void generate(StringBuilder sb, int n) {
        if (n == sb.length()) {
            System.out.println(sb.toString());
            return;
        }
        for (char letter : alphabet) {
            sb.setCharAt(n, letter);
            generate(sb, n + 1);
        }
    }
    public static void main(String[] args) {
        StringBuilder sb = new StringBuilder();
        for (int length = 2; length <= 5; length++) {
            sb.setLength(length);
            generate(sb, 0);
        }
    }
}

这会生成所有2个字母,3个字母,4个字母和5个字母的“单词”。它使用标准的递归算法。

另见


在更多数学上,人们经常会混淆“排列”这个词的含义。是的,有26个! 26个字母a-z的排列 - 这是 A LOT 字符串,但这不包括aa, ab等。它包括所有字符串,其中26个字母各自出现一次

答案 1 :(得分:5)

考虑一下你在做什么: 你循环遍历第一个数组,并循环遍历第二个一次,每次迭代通过该循环。 那将会产生总计26 ^ 2的结果,或676(不是576)。 你构建输出的方式是非常具体的,检查你得到的东西,你会发现那里有一个高度明确的模式。

第二个阵列当然从未使用过,所以完全是多余的。

解决方案是在纸上写出如何手动尝试,然后尝试将其转换为代码。 对于一个你不希望只有特定长度的词(你得到的)或特定的字母模式(你也得到)。

答案 2 :(得分:3)

  但是26岁!单词是4.03291461×1026

     

如何用java编写程序

用Java或任何其他语言编写该程序。这将毫无意义,因为它需要花费数十亿年才能完成。

但是这个数字对于你在评论中的预期结果来说也是完全错误的。 26!是排列的数量,即在没有重复的情况下订购26个元素的不同方式。单词的数量为26 ^ n,其中n是长度。

答案 3 :(得分:-1)

这是我的解决方案。它很快,所以不要太过于优化。

public static void printWords(int length) {

    if (length < 1)
        throw new IllegalArgumentException();

    printWordsRec("", length);
}

private static void printWordsRec(String base, int length) {

    for (char c = 'a'; c <= 'z'; c++) {
        if (length == 1) {
            System.out.println(base + c);
        }
        else {
            printWordsRec(base + c, length - 1);
        }
    }
}