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 - Hash Approach INPUT Wordlist: KiTe kite hare Hare Queries: kite Kite KiTe Hare HARE Hear hear keti Hash Maps Built: exactMap (case-sensitive): "KiTe" --> "KiTe" "kite" --> "kite" ... capsMap (lowercase key): "kite" --> "KiTe" (first) vowelMap (vowels --> *): "k*t*" --> "KiTe" "h*r*" --> "hare" ALGORITHM STEPS 1 Build exactMap word --> word (case-sensitive) 2 Build capsMap lowercase(word) --> word (keep first occurrence) 3 Build vowelMap Replace vowels with '*' devowel(lower(word)) --> word 4 Process Queries Check in precedence order: 1. exactMap[query] (exact) 2. capsMap[lower(query)] 3. vowelMap[devowel(lower(q))] 4. Return "" if no match First match wins! FINAL RESULT Query --> Match --> Result "kite" exact --> "kite" "Kite" caps --> "KiTe" "KiTe" exact --> "KiTe" "Hare" exact --> "Hare" "HARE" caps --> "hare" "Hear" no match --> "" "hear" no match --> "" "keti" vowel --> "KiTe" Output Array: ["kite", "KiTe", "KiTe", "Hare", "hare", "", "", "KiTe"] OK - All 8 queries processed Key Insight: Use 3 hash maps for O(1) lookup: exactMap for case-sensitive match, capsMap for case-insensitive match, and vowelMap for vowel-pattern match. The devowel function replaces all vowels (a,e,i,o,u) with '*' to create a pattern. "keti" and "kite" both become "k*t*", enabling vowel error matching. Time: O(N+Q) TutorialsPoint - Vowel Spellchecker | Hash Approach
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