https://leetcode.com/problems/vowel-spellchecker/
https://leetcode.com/problems/vowel-spellchecker/discuss/211189/JavaC%2B%2BPython-Two-HashMap
Time Complexity: , where is the total content of
X. https://leetcode.com/problems/vowel-spellchecker/discuss/211332/Java-30ms-Trie
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"]
, dquery = "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 capitlization, 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"]
Note:
1 <= wordlist.length <= 5000
1 <= queries.length <= 5000
1 <= wordlist[i].length <= 7
1 <= queries[i].length <= 7
- All strings in
wordlist
andqueries
consist only of english letters.
For each word in the wordlist,
get its the lower pattern and devowel pattern,
get its the lower pattern and devowel pattern,
For each lower pattern, record the first such match to hashmap
For each vowel pattern, record the first such match to hashmap
cap
.For each vowel pattern, record the first such match to hashmap
vowel
.
For each query,
check if it's in the
check if there is a match in
check if there is a match in
otherwise return
check if it's in the
words
set,check if there is a match in
cap
,check if there is a match in
vowel
,otherwise return
""
. public String[] spellchecker(String[] wordlist, String[] queries) {
Set<String> words = new HashSet<>(Arrays.asList(wordlist));
HashMap<String, String> cap = new HashMap<>();
HashMap<String, String> vowel = new HashMap<>();
for (String w : wordlist) {
String lower = w.toLowerCase(), devowel = lower.replaceAll("[aeiou]", "#");
cap.putIfAbsent(lower, w);
vowel.putIfAbsent(devowel, w);
}
for (int i = 0; i < queries.length; ++i) {
if (words.contains(queries[i])) continue;
String lower = queries[i].toLowerCase(), devowel = lower.replaceAll("[aeiou]", "#");
if (cap.containsKey(lower)) {
queries[i] = cap.get(lower);
} else if (vowel.containsKey(devowel)) {
queries[i] = vowel.get(devowel);
} else {
queries[i] = "";
}
}
return queries;
}
https://leetcode.com/problems/vowel-spellchecker/discuss/211189/JavaC%2B%2BPython-Two-HashMap
For each word in the wordlist,
get its the lower pattern and devowel pattern,
get its the lower pattern and devowel pattern,
For each lower pattern, record the first such match to hashmap
For each vowel pattern, record the first such match to hashmap
cap
.For each vowel pattern, record the first such match to hashmap
vowel
.
For each query,
check if it's in the
check if there is a match in
check if there is a match in
otherwise return
https://leetcode.com/articles/vowel-spellchecker/check if it's in the
words
set,check if there is a match in
cap
,check if there is a match in
vowel
,otherwise return
"
Time Complexity: , where is the total content of
wordlist
and queries
.
Set<String> words_perfect;
Map<String, String> words_cap;
Map<String, String> words_vow;
public String[] spellchecker(String[] wordlist, String[] queries) {
words_perfect = new HashSet();
words_cap = new HashMap();
words_vow = new HashMap();
for (String word : wordlist) {
words_perfect.add(word);
String wordlow = word.toLowerCase();
words_cap.putIfAbsent(wordlow, word);
String wordlowDV = devowel(wordlow);
words_vow.putIfAbsent(wordlowDV, word);
}
String[] ans = new String[queries.length];
int t = 0;
for (String query : queries)
ans[t++] = solve(query);
return ans;
}
public String solve(String query) {
if (words_perfect.contains(query))
return query;
String queryL = query.toLowerCase();
if (words_cap.containsKey(queryL))
return words_cap.get(queryL);
String queryLV = devowel(queryL);
if (words_vow.containsKey(queryLV))
return words_vow.get(queryLV);
return "";
}
public String devowel(String word) {
StringBuilder ans = new StringBuilder();
for (char c : word.toCharArray())
ans.append(isVowel(c) ? '*' : c);
return ans.toString();
}
public boolean isVowel(char c) {
return (c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u');
}
X. https://leetcode.com/problems/vowel-spellchecker/discuss/211332/Java-30ms-Trie