LeetCode49,一题学会hash算法

本文始发于个人公众号:TechFlow,原创不易,求个关注


今天是LeetCode专题的第30篇文章,一起来看一道字符串分组的问题。

题意

这题的题意很简单,给定一个字符串数组,要求将所有字符串按照构成分组

举个例子,比如给定的数组是[eat, ate, tea, tan, nat, bat]。

其中eat,ate,tea这三个单词用到的字母都是e,t和a各一个。tan和nat用到的都是a,n和t,最后剩下bat,所以分组结果就是:[eat, ate, tea],[tan, nat]和[bat]。

暴力

我们依然从最简单的思路开始想起,我们分组的依据是每一个字符串当中用到的字母的情况。所以我们可以把每一个字符串当中所有的元素拆解出来,放到一个dict当中,然后我们用这个dict来作为分组的标准,将dict相同的字符串放在同一组。

比如eat我们把它变成{‘e’: 1, ‘a’: 1, ‘t’: 1},由于一个字母可能出现多个,所以我们也要记录出现的次数。但有一个问题是,dict是动态数据,在Python当中我们不能用它作为另一个dict的key。这个问题比较简单的方法是我们写一个方法将这个dict拼接成字符串,比如’e1a1t1’。我们用这个作为key。但是这又有了一个问题,dict当中的key并不一定是有序的,所以我们需要对dict进行排序,可以看下下图中的流程。

也就是说我们需要实现一个函数,它的输入是字符串,输出是这个字符串构成的元素。

def splitStr(s):
    d = defaultdict(int)
    for c in s:
        d[c] += 1
    ret = ''
    # 将dict中内容排序
    for k,v in sorted(d.items()):
        ret += (str(k) + str(v))
    return ret

到这里就简单了,我们在外层再创建一个dict用来存储分组后的结果即可,我们很容易就能写出代码:

from collections import defaultdict

class Solution:
    def splitStr(self, s):
        d = defaultdict(int)
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值