Vowel Spellchecker - Problem

Given a wordlist, we want to implement a spellchecker that converts a query word into a correct word.

For a given query word, the spell checker handles two categories of spelling mistakes:

Capitalization: If the query matches a word in the wordlist (case-insensitive), then the query word is returned with the same case as the case in the wordlist.

Example: wordlist = ["yellow"], query = "YellOw"correct = "yellow"

Vowel Errors: If after replacing the vowels ('a', 'e', 'i', 'o', 'u') of the query word with any vowel individually, it matches a word in the wordlist (case-insensitive), then the query word is returned with the same case as the match in the wordlist.

Example: wordlist = ["YellOw"], query = "yollow"correct = "YellOw"

The spell checker operates under the following precedence rules:

1. When the query exactly matches a word in the wordlist (case-sensitive), return the same word back.

2. When the query matches a word up to capitalization, return the first such match in the wordlist.

3. When the query matches a word up to vowel errors, return the first such match in the wordlist.

4. If the query has no matches in the wordlist, return the empty string.

Given some queries, return a list of words answer, where answer[i] is the correct word for query = queries[i].

Input & Output

Example 1 — Mixed Cases and Vowel Errors
$ Input: wordlist = ["KiTe", "kite", "hare", "Hare"], queries = ["kite", "Kite", "KiTe", "Hare", "HARE", "Hear", "hear", "keti"]
Output: ["kite", "KiTe", "KiTe", "Hare", "hare", "", "", "KiTe"]
💡 Note: "kite": exact match. "Kite": case match with "KiTe" (first). "KiTe": exact match. "Hare": exact match. "HARE": case match with "hare". "Hear": no vowel match. "hear": no match. "keti": vowel match with "KiTe".
Example 2 — Priority Testing
$ Input: wordlist = ["yellow", "Yellow", "YellOw"], queries = ["yellow", "Yellow", "YellOw"]
Output: ["yellow", "Yellow", "YellOw"]
💡 Note: All queries have exact matches in the wordlist, so they return themselves unchanged.
Example 3 — No Matches
$ Input: wordlist = ["hello"], queries = ["hi", "world", "test"]
Output: ["", "", ""]
💡 Note: None of the queries match "hello" exactly, by case, or by vowel pattern, so all return empty strings.

Constraints

  • 1 ≤ wordlist.length, queries.length ≤ 5000
  • 1 ≤ wordlist[i].length, queries[i].length ≤ 7
  • wordlist[i] and queries[i] consist only of English letters

Visualization

Tap to expand
Vowel Spellchecker: Priority-Based Word MatchingWordlistKiTekitehareQuerieskiteKiteketiPriority Check1. Exact Match2. Case Match3. Vowel PatternResultskiteKiTeKiTe"kite" → exact match → "kite""Kite" → case match → "KiTe" (first occurrence)"keti" → vowel match (k*t*) → "KiTe" (first with pattern)
Understanding the Visualization
1
Input
Wordlist and queries to be spell-checked
2
Priority Matching
Check exact → case → vowel pattern matches
3
Output
Corrected words or empty strings
Key Takeaway
🎯 Key Insight: Preprocess the dictionary into hash maps for each error type to achieve O(1) lookups instead of scanning the entire wordlist for each query.
Asked in
Google 15 Facebook 12 Apple 8
31.3K Views
Medium Frequency
~25 min Avg. Time
847 Likes
Ln 1, Col 1
Smart Actions
💡 Explanation
AI Ready
💡 Suggestion Tab to accept Esc to dismiss
// Output will appear here after running code
Code Editor Closed
Click the red button to reopen