初始代码:根据自己的思路写的,一直循环判断是否相同,遇到数据稍微多的就超出时间限制
class Solution(object):
def groupAnagrams(self, strs):
"""
:type strs: List[str]
:rtype: List[List[str]]
"""
# 判断单词字母是否相同
# 1、长度 2、长度相同的前提下,两个循环判断是否字母相同 找到列表中全部相同字符的
i=0
j=0
k=0
same=[]
result=[]
while i<len(strs):
# 找这个字符,全部相同的字符
len_i = len(strs[i])
j=i+1
same=[]
same.append(strs[i])
# j用来找下一个相同的字符,找到相同的就加入到列表same中,同时strs删除该字符
while j<len(strs):
len_j = len(strs[j])
# 字符长度相同才有可能字符相同
if len_i==len_j:
# 判断字符是否全都相同
# h标记strs[i]的每一个字符
h=0
k=0
flag=0
good=True
str_j=strs[j]
while k<len_i and good:
while h<len(str_j):
if strs[i][k]==str_j[h]:
flag+=1
str_j=str_j[:h] + str_j[h+1:]
h=0
break
elif h==len(str_j) and flag<=k:
good=False
else:
h+=1
k+=1
if flag==len_i:
same.append(strs[j])
strs.pop(j)
j-=1
j+=1
result.append(same)
i+=1
print(result)
return result
AI优化的代码:简单明了.......
好好学习吧,要变辣椒了 -_-
class Solution(object):
def groupAnagrams(self, strs):
"""
:type strs: List[str]
:rtype: List[List[str]]
"""
anagrams = {}
for word in strs:
sorted_word = ''.join(sorted(word)) # 将单词排序后作为键
if sorted_word in anagrams:
anagrams[sorted_word].append(word)
else:
anagrams[sorted_word] = [word]
return list(anagrams.values())
注:
1、
利用字典的特性:键必须是不同的。
2、join()
方法:将序列中的元素以指定的字符串连接起来,生成一个新的字符串。