843.Guess the Word
Problem description:
This is an interactive problem.
You are given an array of unique strings wordlist
where wordlist[i]
is 6
letters long, and one word in this list is chosen as secret
.
You may call Master.guess(word)
to guess a word. The guessed word should have type string
and must be from the original list with 6
lowercase letters.
This function returns an integer
type, representing the number of exact matches (value and position) of your guess to the secret
word. Also, if your guess is not in the given wordlist, it will return -1
instead.
For each test case, you have exactly 10
guesses to guess the word. At the end of any number of calls, if you have made 10
or fewer calls to Master.guess
and at least one of these guesses was secret
, then you pass the test case.
Example 1:
1 | Input: secret = "acckzz", wordlist = ["acckzz","ccbazz","eiowzz","abcczz"], numguesses = 10 |
Example 2:
1 | Input: secret = "hamada", wordlist = ["hamada","khaled"], numguesses = 10 |
Constraints:
1 <= wordlist.length <= 100
wordlist[i].length == 6
wordlist[i]
consist of lowercase English letters.- All the strings of
wordlist
are unique. secret
exists inwordlist
.numguesses == 10
Solution:
Clarify
Does the algorithm I design have to find the secret word within 10 times of guesses?
No, you only need to design an algorithm that can find the secret word in as less times as possible.
The question becomes how to narrow down the candidates after each time we guess?
How to narrow the candidates?
we have x = master.guess(word)
if x == 6, we find the secret word, the algorithm ends
if x != 6, it means secret has exactly x matches with word
We could search in the candidates, and only keep the ones that have exact x matches with word. In this way, we narrow the candidates after we call master.guess(), and guarantee that secret is in candidates left.
How to choose from candidates?
- option-1: select the first candidate as the input of master.guess() every time
- option-2: randomly select one word from candidates as the input of master.guess()
- [Preferred] option-3: calculate matching scores for each candidates, guess with the one with highest score
1 | # """ |
time complexity: $O(n)$
space complexity: $O(n)$
reference:
related problem: