原题
第一种想法是写一个能够判断两个字符串是否是相互颠倒顺序而成的,但是当列表长度很大时会导致时间超过限制,所以被否决。
第二种想法将字符串提取出来,对其字母排序,然后采用字典中键值的方式来进行添加。排序后的结果作为键,原始的字符串作为值,具有相同键的字符串会被添加到同一个值里面。
class Solution:
def groupAnagrams(self, strs: 'List[str]') -> 'List[List[str]]':
strs_ = {}
for i in range(len(strs)):
key = ''.join(sorted(strs[i]))
if strs_.__contains__(key)==False:
strs_[key] = []
strs_[key].append(strs[i])
return list(strs_.values())
这里也将第一种方法的代码贴出,虽然没有通过,但希望有小伙伴能用这种方式给个更好地解法。
class Solution:
def groupAnagrams(self, strs: 'List[str]') -> 'List[List[str]]':
res_L = []
for v in strs:
flag = False
for res in res_L:
if Solution.is_same(res[0], v):
res.append(v)
flag = True
break
if flag == False:
res_n = [v]
res_L.append(res_n)
return res_L
def is_same(s1, s2):
if len(s1) != len(s2):
return False
seen1 = set()
seen2 = set()
for i in s1:
seen1.add(i)
for i in s2:
seen2.add(i)
if seen1 != seen2:
return False
for l in list(seen1):
if s1.count(l) != s2.count(l):
return False
return True