題目
https://leetcode.com/problems/vowel-spellchecker
日期
2024/9/14
程式碼
class Solution {
func spellchecker(_ wordlist: [String], _ queries: [String]) -> [String] {
// == 建立三個 HashMaps ==
// 利用建立 HashMap ,減少需要走訪的次數
/// Case 1. 絕對相同
let wordSet = Set(wordlist)
/// Case 2. 建立 index mapping ,只保留第一次出現的詞
let wordCapitalized = wordlist
.reduce(into: [String: String]()) { result, word in
let lowercasedWord = word.lowercased()
result[lowercasedWord] = result[lowercasedWord] ?? word
}
/// 3. 正規化母音,只保留第一次出現的詞
let wordDevoweled = wordlist
.reduce(into: [String: String]()) { result, word in
let devoeledWord = devowel(word)
result[devoeledWord] = result[devoeledWord] ?? word
}
// == 開始比對 ==
return queries.map { query in
wordSet.contains(query) ? query : // Case 1.
wordCapitalized[query.lowercased()] // Case 2.
?? wordDevoweled[devowel(query)] // Case 3.
?? ""
}
}
/// 利用正規表示式把母音改成 *
func devowel(_ word: String) -> String {
word.lowercased().replacing(/[aeiou]/, with: "*")
}
}