0

ループを使用して何かの可能な順列をチェックすることに関して質問があります。

暗号文は、26 スロットの char 配列を使用して形成されました。この配列には、ランダム化されたアルファベット (すべての文字が 1 回だけ出現する) が含まれており、元の暗号化されていない文のすべての文字が、配列の 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 に答える