题目:
leetcode.cn/problems/vo…
算法:
方法一: hash table
妙是妙,想不到
func spellchecker(wordlist []string, queries []string) []string {
mapPerfect, mapCap, mapVowel := make(map[string]int, 0), make(map[string]int, 0), make(map[string]int, 0)
ans := make([]string, len(queries))
for i := range wordlist {
// 每个map只保存第一个符合条件的字符
if _, ok := mapPerfect[wordlist[i]]; !ok {
mapPerfect[wordlist[i]] = i
}
deCapWord := strings.ToLower(wordlist[i])
if _, ok := mapCap[deCapWord]; !ok {
mapCap[deCapWord] = i
}
// 注意元音转换也忽略大小写
deVowelWord := volwel(deCapWord)
if _, ok := mapVowel[deVowelWord]; !ok {
mapVowel[deVowelWord] = i
}
}
for i := range queries {
if index, ok := mapPerfect[queries[i]]; ok {
ans[i] = wordlist[index]
continue
}
deCapWord := strings.ToLower(queries[i])
if index, ok := mapCap[deCapWord]; ok {
ans[i] = wordlist[index]
continue
}
// 注意元音转换也忽略大小写
if index, ok := mapVowel[volwel(deCapWord)]; ok {
ans[i] = wordlist[index]
continue
}
ans[i] = ""
}
return ans
}
func volwel(str string) string {
byts := []byte(str)
for i := range byts {
if byts[i] == 'a' || byts[i] == 'e' || byts[i] == 'i' || byts[i] == 'o' || byts[i] == 'u' {
byts[i] = '*'
}
}
return string(byts)
}