1160 拼写单词(计数)

1. 问题描述:

给你一份『词汇表』(字符串数组) words 和一张『字母表』(字符串) chars。
假如你可以用 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。

提示:

1 <= words.length <= 1000
1 <= words[i].length, chars.length <= 100
所有字符串中都仅包含小写英文字母

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/find-words-that-can-be-formed-by-characters

2. 思路分析:

对于这道题目来说主要还是对字符串进行计数,统计出chars字符串的各个字母出现的次数,然后通过循环遍历出words中每个单词字母出现的次数,看一下是否能够构成单词,题解中的代码使用python中的Counter方法进行计数,并且使用all函数判断出字典中字母出现的次数是否满足对应的条件这样编写代码比较简便一点

3. 代码如下:

from typing import List


class Solution:
    def countCharacters(self, words: List[str], chars: str) -> int:
        # 模拟整个过程即可
        dic = [0 for i in range(26)]
        for i in chars:
            dic[ord(i) - ord("a")] += 1
        res = 0
        for i in words:
            flag = 1
            for j in i:
                if i.count(j) > dic[ord(j) - ord("a")]:
                    flag = 0
                    break
            if flag == 1:
                res += len(i)
        return res

题解中的代码:

class Solution:
    def countCharacters(self, words: List[str], chars: str) -> int:
        ans = 0
        cnt = collections.Counter(chars)
        for w in words:
            c = collections.Counter(w)
            if all([c[i] <= cnt[i] for i in c]):
                ans += len(w)
        return ans

 

你可能感兴趣的:(领扣)