Leetcode•Nov 13, 2026
Vowel Spellchecker
Hazrat Ali
Leetcode
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" - Example:
wordlist = ["Yellow"],query = "yellow":correct = "Yellow" - Example:
wordlist = ["yellow"],query = "yellow":correct = "yellow"
- Example:
- 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" - Example:
wordlist = ["YellOw"],query = "yeellow":correct = ""(no match) - Example:
wordlist = ["YellOw"],query = "yllw":correct = ""(no match)
- Example:
In addition, the spell checker operates under the following precedence rules:
- When the query exactly matches a word in the wordlist (case-sensitive), you should return the same word back.
- When the query matches a word up to capitalization, you should return the first such match in the wordlist.
- When the query matches a word up to vowel errors, you should return the first such match in the wordlist.
- If the query has no matches in the wordlist, you should return the empty string.
Given some queries, return a list of words answer, where answer[i] is the correct word for query = queries[i].
Example 1:
Input: wordlist = ["KiTe","kite","hare","Hare"], queries = ["kite","Kite","KiTe","Hare","HARE","Hear","hear","keti","keet","keto"] Output: ["kite","KiTe","KiTe","Hare","hare","","","KiTe","","KiTe"]
Example 2:
Input: wordlist = ["yellow"], queries = ["YellOw"] Output: ["yellow"]
Solution
var spellchecker = function(wordlist, queries) {
const exact = new Set(wordlist);
const caseInsensitive = new Map();
const vowelInsensitive = new Map();
for (const word of wordlist) {
const lower = word.toLowerCase();
const devoweled = lower.replace(/[aeiou]/g, '#');
if (!caseInsensitive.has(lower)) {
caseInsensitive.set(lower, word);
}
if (!vowelInsensitive.has(devoweled)) {
vowelInsensitive.set(devoweled, word);
}
}
const result = [];
for (const query of queries) {
const lower = query.toLowerCase();
const devoweled = lower.replace(/[aeiou]/g, '#');
if (exact.has(query)) {
result.push(query);
} else if (caseInsensitive.has(lower)) {
result.push(caseInsensitive.get(lower));
} else if (vowelInsensitive.has(devoweled)) {
result.push(vowelInsensitive.get(devoweled));
} else {
result.push("");
}
}
return result;
};