Сложность: medium
Дан список слов, и нам нужно реализовать проверку орфографии, которая преобразует слово запроса в правильное слово.
Для данного слова запроса, проверка орфографии обрабатывает две категории ошибок правописания:
Заглавные буквы: если запрос совпадает со словом в списке слов (без учета регистра), то слово запроса возвращается с таким же регистром, как и в списке слов.
Пример: wordlist = ["yellow"], query = "YellOw": correct = "yellow"
Пример: wordlist = ["Yellow"], query = "yellow": correct = "Yellow"
Пример: wordlist = ["yellow"], query = "yellow": correct = "yellow"
Ошибки гласных: если после замены гласных ('a', 'e', 'i', 'o', 'u') в слове запроса на любую гласную по отдельности оно совпадает со словом в списке слов (без учета регистра), то слово запроса возвращается с таким же регистром, как и совпадающее слово в списке слов.
Пример: wordlist = ["YellOw"], query = "yollow": correct = "YellOw"
Пример: wordlist = ["YellOw"], query = "yeellow": correct = "" (нет совпадения)
Пример: wordlist = ["YellOw"], query = "yllw": correct = "" (нет совпадения)
Кроме того, проверка орфографии работает по следующим правилам приоритета:
Когда запрос точно совпадает со словом в списке слов (с учетом регистра), вы должны вернуть это же слово.
Когда запрос совпадает со словом за исключением регистра, вы должны вернуть первое такое совпадение в списке слов.
Когда запрос совпадает со словом за исключением ошибок гласных, вы должны вернуть первое такое совпадение в списке слов.
Если запрос не имеет совпадений в списке слов, вы должны вернуть пустую строку.
Дан массив запросов, верните список слов answer, где answer[i] — правильное слово для query = queries[i].
Пример:
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"]
👨💻 Алгоритм:
1⃣Используйте множество для хранения слов из списка, чтобы проверять точные совпадения.
2⃣Используйте хэш-таблицу для хранения слов в нижнем регистре и соответствующих слов из списка для проверки совпадений без учета регистра.
3⃣Используйте хэш-таблицу для хранения слов в нижнем регистре с замененными гласными символами и соответствующих слов из списка для проверки совпадений с ошибками гласных.
😎 Решение:
class Solution {
var wordsPerfect: Set<String> = []
var wordsCap: [String: String] = [:]
var wordsVow: [String: String] = [:]
func spellchecker(_ wordlist: [String], _ queries: [String]) -> [String] {
for word in wordlist {
wordsPerfect.insert(word)
let wordLow = word.lowercased()
wordsCap[wordLow, default: word] = word
let wordLowDV = devowel(wordLow)
wordsVow[wordLowDV, default: word] = word
}
return queries.map { solve($0) }
}
func solve(_ query: String) -> String {
if wordsPerfect.contains(query) {
return query
}
let queryL = query.lowercased()
if let match = wordsCap[queryL] {
return match
}
let queryLV = devowel(queryL)
if let match = wordsVow[queryLV] {
return match
}
return ""
}
func devowel(_ word: String) -> String {
let vowels: Set<Character> = ["a", "e", "i", "o", "u"]
return String(word.map { vowels.contains($0) ? "*" : $0 })
}
}Ставь 👍 и забирай 📚 Базу знаний