0

我有一个关于通过使用循环检查某些东西的可能排列的问题:

使用 26 槽字符数组形成加密句子。这个数组包含一个随机字母表(每个字母只出现一次),原始未加密句子的每个字母都被更改为数组在它的第 x 个插槽中的任何字母,x 是字母表中的原始字符位置。

例如,如果加密数组是 {'q','w','e','r','t',...,'m'},那么消息“abez”将变为“qwtm “ 因为:

a is the 1st letter of the alphabet and the 1st slot of the array contained a 'q'
b is the 2nd letter of the alphabet and the 2nd slot of the array contained a 'w'
e is the 5th letter of the alphabet and the 5th slot of the array contained a 't'
...

我想通过检查关键字“早上”的每个排列来暴力破解加密的句子。

我该如何正确地做到这一点?我已经编写了一个方法来检查一个 char[] 是否包含在另一个 char[] 中,但是如何循环遍历 char[] 排列呢?

4

1 回答 1

0

您需要做的是遍历字符串的字符,并将每个字符更改为所有其他字母。您可以拥有一个采用以下参数的函数:

  1. 要转换的字符串
  2. 已经使用的字母表

并返回所有组合。

然后,您可以为单词中的每个字母递归调用它(早上),它会返回所有可能单词的列表。当递归调用自身,并且“子”函数返回时,父函数循环遍历所有答案,并为每个答案加上自己的字母前缀。它必须为所有字母执行此操作(递归调用和前缀字母),不包括已经使用的字母。

预计这将花费大量时间。

于 2012-11-25T03:16:55.803 回答