966. 元音拼写检查器

88 阅读1分钟

题目:
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)
}