Wordを推測

この問題はLeetCodeプラットフォームに新しい* *インタラクティブな問題です。

私たちは、それぞれの単語は、長い6つの文字、秘密として選択され、このリスト内の1つの単語である、ユニークワードの単語リストを与えています。

あなたは呼び出すことが  master.guess(word) 単語を推測します。推測単語がタイプを持つ必要があります  string し、6つの小文字で元のリストからでなければなりません。

この関数は、返し  integer の秘密の言葉に、あなたの推測の完全一致(値と位置)の数を表す、タイプを。あなたの推測は、与えられた単語リストにない場合も、それが返されます  -1 代わりに。

各テストケースについて、あなたは単語を推測する10件の推測を持っています。呼び出し、任意の数の終わりに、あなたは、10回の以下のコール加えた場合  master.guess 、これらの推測の1と少なくともを秘密だった、あなたはテストケースを渡します。

以下の例のテストケースに加えて、単語リスト100個の単語とそれぞれ、5つの追加のテストケースが存在することになります。これらのテストケース内の各単語の文字がからランダムに独立して選ばれた  'a'に  'z'与えられた単語リスト内のすべての単語が一意であるように、。

Example 1:
Input: secret = "acckzz", wordlist = ["acckzz","ccbazz","eiowzz","abcczz"]

Explanation:

`master.guess("aaaaaa")` returns -1, because `"aaaaaa"` is not in wordlist.
`master.guess("acckzz")` returns 6, because `"acckzz"` is secret and has all 6 matches.
`master.guess("ccbazz")` returns 3, because` "ccbazz"` has 3 matches.
`master.guess("eiowzz")` returns 2, because `"eiowzz"` has 2 matches.
`master.guess("abcczz")` returns 4, because `"abcczz"` has 4 matches.

We made 5 calls to master.guess and one of them was the secret, so we pass the test case.

考える:この質問は、秘密の単語を推測する必要がある単語がある単語列の単語リストを、持っていると言われて、機能のAPIの推測では、今そこにある、あなたは単語間の一致の数を返し、ターゲット単語を推測することができます。今、各テストケースは、対象の単語を推測するために10回のチャンスは、APIの数はせいぜい10倍を呼び出していない、とターゲット単語を推測するならば、それはテストに合格することができ、があります。最後の目標単語、および10以上のアレイのワード長は、失敗した場合ので、各単語のための線形APIへの呼び出しは、好ましくないように、いくつかのコールAPIなどの必要性に起因まず、。ランダムに選択され得るワードが検出され、呼が数CNTのAPIになり、このような場合には、単語の数と現在のターゲット単語との間の一致を示します。次に、どのようにそれを行うには?ニーズが同様の機能のAPIを書くために、単語の配列再び濾過されるように、それはコールの試合に現在の単語とターゲット単語の平野言葉に隠されたので、あなたは、単語の配列全体をフィルタリングすることができるように、任意の二つの単語間の一致の数を返します。戻り値は、まだCNT、もちろん、また戻っは、CNTが、それは大丈夫だタイトルは単語を言うので、まだ、正確に6 CNT停止するまで、この手順を繰り返し、無関係な単語の大きな波フィルタするためにできることは言い換えれがあるでしょうしなければなりません長さは、6であります

核となるアイデア:単語の後に推測がより正しい答えであるので、ランダムな推測でその単語を選択して、あなたはたくさんのがキッカー数えることができないので、その後、すべての選出された候補者の、同じカウント==語の単語のすべてをスキャンします正解とキックオフ言葉は、そう6のワード長まで、あるカウント== 6まで、上記の手順を続行した単語と一致し、されていません。

/**
 * // This is the Master's API interface.
 * // You should not implement it, or speculate about its implementation
 * interface Master {
 *     public int guess(String word) {}
 * }
 */
class Solution {
    public void findSecretWord(String[] wordlist, Master master) {
        if(wordlist == null || wordlist.length == 0) {
            return;
        }
        Random random = new Random();
        int count = 0;
        List<String> wlist = Arrays.asList(wordlist);
        
        for(int i = 0, cnt = 0; i < 10 && cnt < 6; i++) {
            int n = wlist.size();
            String word = wlist.get(random.nextInt(n));
            cnt = master.guess(word);
            
            List<String> newlist = new ArrayList<>();
            for(String candidate : wlist) {
                if(getDistance(candidate, word) == cnt) {
                    newlist.add(candidate);
                } 
            }
            wlist = newlist;
        }
    }
    
    private int getDistance(String word, String target) {
        int count = 0;
        for(int i = 0; i < word.length(); i++) {
            if(word.charAt(i) == target.charAt(i)) {
                count++;
            }
        }
        return count;
    }
}

 

公開された673元の記事 ウォン称賛13 ビュー180 000 +

おすすめ

転載: blog.csdn.net/u013325815/article/details/105221311