843. Guess the Word LeetCode Solution

In this guide, you will get 843. Guess the Word LeetCode Solution with the best time and space complexity. The solution to Guess the Word problem is provided in various programming languages like C++, Java, and Python. This will be helpful for you if you are preparing for placements, hackathons, interviews, or practice purposes. The solutions provided here are very easy to follow and include detailed explanations.

Table of Contents

  1. Problem Statement
  2. Complexity Analysis
  3. Guess the Word solution in C++
  4. Guess the Word solution in Java
  5. Guess the Word solution in Python
  6. Additional Resources
843. Guess the Word LeetCode Solution image

Problem Statement of Guess the Word

You are given an array of unique strings words where words[i] is six letters long. One word of words was chosen as a secret word.
You are also given the helper object Master. You may call Master.guess(word) where word is a six-letter-long string, and it must be from words. Master.guess(word) returns:

-1 if word is not from words, or
an integer representing the number of exact matches (value and position) of your guess to the secret word.

There is a parameter allowedGuesses for each test case where allowedGuesses is the maximum number of times you can call Master.guess(word).
For each test case, you should call Master.guess with the secret word without exceeding the maximum number of allowed guesses. You will get:

“Either you took too many guesses, or you did not find the secret word.” if you called Master.guess more than allowedGuesses times or if you did not call Master.guess with the secret word, or
“You guessed the secret word correctly.” if you called Master.guess with the secret word with the number of calls to Master.guess less than or equal to allowedGuesses.

See also  1139. Largest 1-Bordered Square LeetCode Solution

The test cases are generated such that you can guess the secret word with a reasonable strategy (other than using the bruteforce method).

Example 1:

Input: secret = “acckzz”, words = [“acckzz”,”ccbazz”,”eiowzz”,”abcczz”], allowedGuesses = 10
Output: You guessed the secret word correctly.
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.

Example 2:

Input: secret = “hamada”, words = [“hamada”,”khaled”], allowedGuesses = 10
Output: You guessed the secret word correctly.
Explanation: Since there are two words, you can guess both.

Constraints:

1 <= words.length <= 100
words[i].length == 6
words[i] consist of lowercase English letters.
All the strings of wordlist are unique.
secret exists in words.
10 <= allowedGuesses <= 30

Complexity Analysis

  • Time Complexity: O(n)
  • Space Complexity: O(n)

843. Guess the Word LeetCode Solution in C++

/**
 * // This is the Master's API interface.
 * // You should not implement it, or speculate about its implementation
 * class Master {
 *  public:
 *   int guess(string word);
 * };
 */
class Solution {
 public:
  void findSecretWord(vector<string>& words, Master& master) {
    srand(time(nullptr));

    for (int i = 0; i < 10; ++i) {
      const string& guessedWord = words[rand() % words.size()];
      const int matches = master.guess(guessedWord);
      if (matches == 6)
        break;
      vector<string> updated;
      for (const string& word : words)
        if (getMatches(guessedWord, word) == matches)
          updated.push_back(word);
      words = std::move(updated);
    }
  }

 private:
  int getMatches(const string& s1, const string& s2) {
    int matches = 0;
    for (int i = 0; i < s1.length(); ++i)
      if (s1[i] == s2[i])
        ++matches;
    return matches;
  }
};
/* code provided by PROGIEZ */

843. Guess the Word LeetCode Solution in Java

/**
 * // 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[] words, Master master) {
    Random rand = new Random();

    for (int i = 0; i < 10; ++i) {
      final String guessedWord = words[rand.nextInt(words.length)];
      final int matches = master.guess(guessedWord);
      if (matches == 6)
        break;
      List<String> updated = new ArrayList<>();
      for (final String word : words)
        if (getMatches(guessedWord, word) == matches)
          updated.add(word);
      words = updated.toArray(new String[0]);
    }
  }

  private int getMatches(final String s1, final String s2) {
    int matches = 0;
    for (int i = 0; i < s1.length(); ++i)
      if (s1.charAt(i) == s2.charAt(i))
        ++matches;
    return matches;
  }
}
// code provided by PROGIEZ

843. Guess the Word LeetCode Solution in Python

# """
# This is Master's API interface.
# You should not implement it, or speculate about its implementation
# """
# Class Master:
#   def guess(self, word: str) -> int:

class Solution:
  def findSecretWord(self, words: list[str], master: 'Master') -> None:
    for _ in range(10):
      guessedWord = words[random.randint(0, len(words) - 1)]
      matches = master.guess(guessedWord)
      if matches == 6:
        break
      words = [
          word for word in words
          if sum(c1 == c2 for c1, c2 in zip(guessedWord, word)) == matches]
# code by PROGIEZ

Additional Resources

See also  892. Surface Area of 3D Shapes LeetCode Solution

Happy Coding! Keep following PROGIEZ for more updates and solutions.