Leetcode做题日记:49. 字母异位词分组(PYTHON)

给定一个字符串数组,将字母异位词组合在一起。字母异位词指字母相同,但排列不同的字符串。

示例:

输入: [“eat”, “tea”, “tan”, “ate”, “nat”, “bat”],
输出:
[
[“ate”,“eat”,“tea”],
[“nat”,“tan”],
[“bat”]
]

说明:

所有输入均为小写字母。
不考虑答案输出的顺序。

第一次的代码,最后一个超时了。。。:

	start=0 
        Ans=[] #终极答案
        Chuan=[start] #已经选过的位置的列表
        while start<len(strs):
            biaoji=[] 
            ans=[]
            b=0
            chuan=[start] #只判断和start位置的串相同字母的串
            for i in strs[start]: #记录该字符串的字母
                biaoji.append(i)
            search=start+1
            while search in Chuan: #跳过已经被选择过的位置
                search+=1 
            while search <len(strs):
                if len(strs[search])!=len(biaoji): #筛选
                    search+=1
                    continue
                biaoji1=biaoji[:]    
                for i in strs[search]: 
                    if i in biaoji1:
                        biaoji1.remove(i) #删除特定的一个元素             
                if biaoji1!=[]: #search和start为不相同字母的字符串
                    search+=1
                    continue
                else:
                    chuan.append(search) #符合题意,加入列表
                    Chuan.append(search) #加入总的已经使用过的位置的列表
                    search+=1
            for i in chuan: #从一类的列表中读取出符合题意的字串类
                ans+=[strs[i]]
            Ans.append(ans) #加入终极答案  
            start+=1
            while start in Chuan: #避免从已经使用过的位置开始
                start+=1
        return  Ans

学习新的函数来解
sorted:排序将每个字符排序在列表中
tuple:将列表(字符串)转化成元组
列表不能作为字典索引,元组可以

	dic={}
        ans=[]
        for i in strs:
            d=tuple(sorted(i)) #先排序再转换成元组
            if d in dic: #相同字母的单词的元组d是相同的
                dic[d].append(i) #以元组为索引,添加到字典
            else:
                dic[d]=[i] 
        for value in dic.values(): #读取字典的值,储存到列表中
            ans.append(value)
        return ans

156ms,排名68%提交能通过,但是用最后一个例子来测试的时候,却显示超时?

猜你喜欢

转载自blog.csdn.net/weixin_44033136/article/details/86477648
今日推荐