[leetcode] 966. Vowel Spellchecker

Description

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”
  • 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”], query = “yeellow”: correct = “” (no match)
    • Example: wordlist = [“YellOw”], query = “yllw”: correct = “” (no match)
      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 and queries consist only of english letters.

分析

题目的意思是:这道题做的是一个拼写检查器,分为了完全匹配,大小写忽略匹配,元音字母忽略匹配三种。我说一下答案的思路,大概用了三个字典,第一个事完全匹配,第二个事大小写忽略的匹配,第三个事元音字母忽略匹配。然后遍历query,来按照顺序匹配这三个字典,能匹配上则返回相应字典的值,否则返回空字符串就行了。

代码

class Solution:
    
    def devowel(self,word):
        t=''
        for ch in word:
            if(ch in 'aeiou'):
                t+='*'
            else:
                t+=ch
        return t
    
    def spellchecker(self, wordlist: List[str], queries: List[str]) -> List[str]:
        words_perfect=set(wordlist)
        words_cap={}
        words_vow={}
        for word in wordlist:
            t=word.lower()
            words_cap.setdefault(t,word)
            words_vow.setdefault(self.devowel(t),word)
        
        res=[]
        for query in queries:
            if(query in words_perfect):
                res.append(query)
                continue
            query=query.lower()
            if(query in words_cap):
                res.append(words_cap[query])
                continue
            query=self.devowel(query)
            if(query in words_vow):
                res.append(words_vow[query])
                continue
            res.append('')
        return res

参考文献

[LeetCode] solution

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

农民小飞侠

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值