从给定长度生成所有可能的字符串

2 java algorithm

我希望能够从给定长度生成所有可能的字符串,坦率地说,我不知道如何编写代码.因此,为了进一步解释,我和一位朋友想展示一些基本的黑客攻击技术,因此会出现强制攻击.当然,他将是我的受害者,那里没有违法的东西.

然而,他告诉我的唯一一件事是他的PW将是4个字符长,但我很确定他的PW不会出现在任何字典中,这很容易.

所以我提出了生成每个4-char-long-string的想法,包含az字符(无上限).

是否有人可以跟随代码编写这样的算法?我真的不打扰表演,如果需要1晚才能生成所有PW,那没问题.

别忘了,这只是出于演示目的.

Pau*_*ams 8

您可以通过数字来完成它.从aaaa开始.然后增加"最不重要"的部分,所以aaab.继续前进,直到你到达aaaz.然后增加到aaba.重复,直到你到达zzzz.

所以你需要做的就是实现

String getNext(String current)
Run Code Online (Sandbox Code Playgroud)

为了扩展这个; 它可能不是最快捷的做事方式,但它是最简单的做法.

正如古老的谚语所说的那样 - "首先使它成为正确的,然后让它快速".获得通过所有测试的工作实现(你确实有测试,对吗?)就是你先做的.然后你重写它以使其快速,使用你的测试作为保证你没有打破核心功能.


das*_*ght 5

绝对最简单的方法是使用四个嵌套循环:

char[] pw = new char[4];
for (pw[0] = 'a' ; pw[0] <= 'z' ; pw[0]++)
    for (pw[1] = 'a' ; pw[1] <= 'z' ; pw[1]++)
        for (pw[2] = 'a' ; pw[2] <= 'z' ; pw[2]++)
            for (pw[3] = 'a' ; pw[3] <= 'z' ; pw[3]++)
                System.out.println(new String(pw));
Run Code Online (Sandbox Code Playgroud)

这不能很好地扩展,因为添加额外的字符需要添加嵌套级别.递归方法更灵活,但更难理解:

void findPwd(char[] pw, int pos) {
    if (pos < 0) {
        System.out.println(new String(pwd));
        return;
    }
    for (pw[pos] = 'a' ; pw[pos] <= 'z' ; pw[pos]++)
        findPwd(pw, pos-1);
}
Run Code Online (Sandbox Code Playgroud)

调用这样的递归方法:

char[] pw = new char[4];
findPwd(pw, 3);
Run Code Online (Sandbox Code Playgroud)