Javaのアルゴリズムのシャッフル文字列から元の文字列を取得する方法

M.zK:

私は、文字列をシャッフルするJavaのアルゴリズムを持っています。私はすでにシャッフル文字列の出力と、それをシャッフルするアルゴリズムを持っています...

static String Validate(String f) {
    StringBuilder str = new StringBuilder(f);

    for (int i = 0; i < str.length(); i++) {
        for (int j = i; j < str.length()-1; j++) {
            char t = str.charAt(j);
            str.setCharAt(j, str.charAt(j+1));
            str.setCharAt(j + 1, t);
        }
    }

    System.out.print(str);

    return "" + str.toString();
}

出力文字列があります...

lgcnyurVr34d0Df{__3_R}43na501

私の質問は次のとおりです。元の文字列を取得する方法?

xenteros:

はい、プロセスを元に戻すことが可能です。元の文字列でしたflag{c4n_y0u_r3V3r53_4ndR01D}

独自のアルゴリズムは、次の手順を実行します:

0 0 ABCDEF
0 1 BACDEF
0 2 BCADEF
0 3 BCDAEF
0 4 BCDEAF
1 1 BCDEFA  //A is at the end now
1 2 BDCEFA
1 3 BDECFA
1 4 BDEFCA
2 2 BDEFAC  //C was at index 2 at the beginning of this outer loop iteration
2 3 BDFEAC
2 4 BDFAEC
3 3 BDFACE  //now E went to the end of the String
3 4 BDFCAE
4 4 BDFCEA

それを元に戻すためには、ループや文字が交換される方向の向きを逆にする必要があります。

static String reverseValidate(String reversed) {
    StringBuilder str = new StringBuilder(reversed);

    for (int i = str.length() - 1; i >= 1; i--) {
        for (int j = str.length() - 1; j >= i; j--) {
            char t = str.charAt(j);
            str.setCharAt(j, str.charAt(j - 1));
            str.setCharAt(j - 1, t);
        }
    }

    return str.toString();
}

文字列の長さの各指標について、それがこのインデックスから始まり、移動エンドへの手紙その:algorithあなたが投稿した、それは次のような作品。

それを表示するには、印刷してみてくださいSystem.out.println(i + " " + j + " " + str); 内側のループ内のどこかを。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=191026&siteId=1
おすすめ