leetcode哈希表刷题:拼写单词

最近开始系统地刷题目了,看到比较有意思的题目就写一下心得体会吧~
这道题题目如下所示:
在这里插入图片描述

考虑到chars中每个字符都只能被使用一次,因此不能直接使用set来去重,而是应该考虑使用dict来给每个字符计数,然后在依次对words中的每个字符进行计数,然后再进行比较,将符合条件的字符的长度加和,得到最终结果。
使用字典的代码如下所示:

from collections import defaultdict
class Solution:
    def countCharacters(self, words: List[str], chars: str) -> int:
        #用字典记录words中每个字符串的每个字符的出现次数,然后和chars里面的进行比较
        check_dict = defaultdict(int)
        result = 0
        for i in chars:
            check_dict[i] += 1
        for i in range(len(words)):
            mid = defaultdict(int)
            for j in words[i]:
                mid[j] += 1
            count = 0
            for k in mid.keys():
                if check_dict[k] < mid[k]:
                    count += 1
            if count == 0:
                result += len(words[i])
        return result

但是这种方法的速度并不是很好,有点违背了我对哈希表速度超快的印象。
在这里插入图片描述
我想了一下,可能是创建哈希表的过程会比较耗时。虽然哈希表查询的效率很高,但在这种数据量不大的情况下,如果对所有字符串都生成一次哈希表的话,可能效率就下来了。因此我就想试试直接用count来算一次。

class Solution:
    def countCharacters(self, words: List[str], chars: str) -> int:
        #这个直接用count计数然后再进行比较
        result = 0
        for i in words:
            signal = 0
            for j in i:
                if i.count(j) > chars.count(j):
                    signal = 1
                    break
            if signal == 0:
                result += len(i)
        return result

这种方法的效率明显高于用字典的方法,感觉哈希表速度慢的原因应该是和我想的差不多。
在这里插入图片描述
写完后按照惯例看一下大神们是怎么写的。果不其然有新发现:

①在不调用defaultdict的情况下,可以直接用dict.get来对不存在的key设置默认值;
②在collections库中,还可以调用counter函数,可以直接对字符串中的字符进行计数得到一个字典

只能说学海无涯,多看看总会有新发现😀
写完这题之后感觉,好的方法往往不会比合适的方法更快,甚至可能会更慢。如果大佬们觉得字典方法速度更慢有别的原因,也欢迎指出~

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值