拼词题目来源:https://leetcode-cn.com/problems/find-words-that-c??an-be-formed-by-characters题目给你一个“词汇表”(字符串数组)单词和一个“字母”(字符串)字符。如果你能用chars中的“字母”(字符)拼出words中的一个“词”(字符串),那我们就认为你已经掌握了这个词。注意:chars中的每个字母每次拼写只能使用一次。返回词汇表words中所有单词的长度总和。示例1:输入:words=["cat","bt","hat","tree"],chars="atach"输出:6解释:可以组成字符串“cat”和“hat”,所以答案是3+3=6。示例2:输入:words=["hello","world","leetcode"],chars="welldonehoneyr"输出:10解释:字符串"hello"和"world"可以是形成,所以答案是5+5=10。Tips:1<=words.length<=10001<=words[i].length,chars.length<=100所有字符串只包含小写英文字母解题思路:计算字母出现的次数。Python中有一个Counter类,它是基于用哈希表进行计数的思想,可以用来统计一个单词中字母出现的次数。这里也用了类似的思路来统计字母出现的次数,不过不是直接使用Counter类来完成这道题,而是使用str的count方法来求解。这里,我们要统计每个字母在“alphabet”中出现的次数,还要统计每个字母在“vocabulary”中出现的次数。如果,每个单词中每个字母的出现次数小于或等于字母表中每个字母的出现次数。然后这个词就可以拼出来了。具体可以看下图:代码实现类解决方案:defcountCharacters(self,words:List[str],chars:str)->int:ans=0#遍历词表forwordinwords:#遍历词forcharinword:#统计单词字母在词汇表中出现的次数#统计每个字母在字母表中出现的次数#比较单词字母出现的次数和字母表中每个字母的出现次数ifword.count(char)<=chars.count(char):flag=Trueelse:flag=Falsebreak#如果单词字母的出现次数小于或等于字母表中每个字母的出现次数,则添加单词长度到返回值ansifflag:ans+=len(word)returnAns实现结果以上就是利用统计出现次数的思路解决《拼写单词》问题的主要内容字母。欢迎关注微信公众号《书所集录》
