给定一个字符串数组,将字母异位词组合在一起。字母异位词指字母相同,但排列不同的字符串。
示例:
输入: [“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%提交能通过,但是用最后一个例子来测试的时候,却显示超时?