1

以下は、私が良い解決策を見つけられなかったグラスドアに関するインタビューの質問です。

アルファベット(小文字と大文字)と数字で構成される文字列の長さが25の場合。現在、この文字列では、大文字の一部が小文字になっています。したがって、破損した文字列になります。13や14のような整数を返すブラックボックス関数があるとします。これは、入力文字列が正しいことを示し、そうでない場合は例外をスローします。この破損した文字列を指定して、正しい元の文字列を見つける方法は?

この質問についてアイデアを持っている人はいますか?

ありがとうございました:)

4

2 に答える 2

1

ブラック ボックス関数の (部分文字列でも機能すると仮定して) 宣言が次のようになっているとします。

    public Integer isCorrectString(String value) throws Exception;

以下のように、25 の長さの文字列を修正する小さなループを作成できます。

    String inputString ="abcd...";
    for(int i=1; i<=25; i++){
            try{
                   isCorrectString(inputString.substring(0, i));
             }catch(Exception ex) {
                  //change the char at ith position to upper case as its incorrect
                  inputString = inputString.substring(0, i-1)+
                          inputString.substring(i-1, i).toUpperCase()+
                          inputString.substring(i+1);

             }
     }

ループの後、inputString修正する必要があります。

于 2012-10-05T02:11:44.297 に答える
0

簡単な解決策は、入力文字列の小文字を大文字に変更し、ブラック ボックス関数が整数値を返すかどうかを確認することです (例外ではありません)。すべての組み合わせをチェックする必要があります。最悪の場合の組み合わせの数は、2 の 25 乗 - 1 になります。

于 2012-10-05T02:16:05.863 に答える