使用Java生成所有单词

hus*_*ain 0 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);
    }
}
Run Code Online (Sandbox Code Playgroud)

我只得到这个程序只有576个单词,但26个单词!单词是4.03291461×10 ^ 26

如何在java中编写程序?

pol*_*nts 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);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这将生成所有2个字母,3个字母,4个字母和5个字母的"单词".它使用标准递归算法.

也可以看看


从更加数学的角度来看,人们经常会混淆"排列"这个词的含义.是的,有26个!26个字母的排列a-z- 这是很多字符串,但不包括aa, ab等等.它包括所有字符串,其中26个字母每个只出现一次.


jwe*_*ing 5

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

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

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