通过共同特征建立联系解决LeetCode题库第49题字母异位词分组问题

49.题字母异位词分组

难度:中等

问题描述:

给你一个字符串数组,请你将字母异位词组合在一起。可以按任意顺序返回结果列表。

字母异位词 是由重新排列源单词的所有字母得到的一个新单词。

示例 1:

输入: strs = ["eat", "tea", "tan", "ate", "nat", "bat"]

输出: [["bat"],["nat","tan"],["ate","eat","tea"]]

示例 2:

输入: strs = [""]

输出: [[""]]

示例 3:

输入: strs = ["a"]

输出: [["a"]]

分析:

字母异位词,具有相同的字母,但位置不同,说它们具有相同的特征,好象有,因为具有相同的字母,但又不便于从程序上直接统计,因为字母的位置毕竟不相同,程序只能统计完全相同的内容,所以要进行转化,将它们转化为便于统计的形式。具体做法是将每个单词拆分成字母,并排序,这样异位词就有了相同的形式,具有共同的特征。

程序如下:

#处理函数,将一个字符串列表中的每一项处理成排序了的字符列表
def chuli(mystr):
    return list(map(sorted,list(map(list,mystr))))

#将列表中重复项去掉,,注意在这里不能使用list(set(b))的方式去重
def quchong(b):
    c=[]
    for i in b:
        if i in c:
            continue
        else:
            c.append(i)
    return c

#输入字符串列表
strs=eval(input('pls input strs='))

b=chuli(strs)
c=quchong(b)
d=[] #用于保存处理结果

#用去重之后的c列表项在没有去重的b列表中查找
#如果只有一项直接添加到结果d中,否则将异位词组成子列表e添加到结果列表d中
for i in c:
    if b.count(i)==1:
        d.append([strs[b.index(i)]])
    else:
        e=[]
        k=0
        for j in range(b.count(i)):
            m=b.index(i,k)
            e.append(strs[m])
            k=m+1
        d.append(e)

#输出处理结果
print(d)

运行实例1:

pls input strs=["eat", "tea", "tan", "ate", "nat", "bat"]

[['eat', 'tea', 'ate'], ['tan', 'nat'], ['bat']]

运行实例2:

pls input strs=['abc','bcd','cba']

[['abc', 'cba'], ['bcd']]

感悟:

没有共同点,要找出它们的共同点,这就有了处理。

要善于通过映射,建立由此及彼的联系。

  • 6
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值