基本知识:
关于字符串的排序:
1.多个字符串排序
1.1使用python内置的sorted()
使用该函数后原对象并不发生变化
1.2若多个字符串使用列表进行存储,使用列表的sort()方法
使用该函数后原对象原地变化
2.对单个字符串里的字母进行排序
使用python内置的sorted(),排序后的返回结果是由单个字符组成的列表
若想将这个列表变为一个完整的字符串,使用"".join()
2.关于defaultdict(list)
defaultdict是Pythoncollections模块中的一个类,它继承自内置的dict类。与普通字典不同,defaultdict在初始化时可以指定一个默认工厂函数,这个函数会在访问不存在的键时被调用,返回一个默认值。这样做的好处是避免了在访问不存在的键时抛出KeyError异常,同时也简化了代码。
在创建d = defaultdict(list)之后,可以像使用普通字典一样使用d,但是当尝试访问一个不存在的键时,例如d['new_key'],defaultdict会自动创建一个新条目'new_key': [],并且不会抛出异常。这样,就可以直接对这个新创建的空列表进行append操作,而不需要先检查键是否存在。
3.字典的属性
使用dict.keys()和dict.values()就可访问字典全部键和对应值
使用list(dict.values())就可将字典全部值放入一个列表中
题目:
给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。
字母异位词 是由重新排列源单词的所有字母得到的一个新单词。
示例 1:
输入: strs = ["eat", "tea", "tan", "ate", "nat", "bat"]
输出: [["bat"],["nat","tan"],["ate","eat","tea"]]
示例 2:
输入: strs = [""]
输出: [[""]]
示例 3:
输入: strs = ["a"]
输出: [["a"]]
思路:
使用hash思想,使用字典中键和值之间的对应
若字符串字母组成相似,则排序后一定相等,将排序后的字符串作为键,使用这些字符的串都作为该键的值,最后将字典的值变为列表返回。
class Solution(object):
def groupAnagrams(self, strs):
"""
:type strs: List[str]
:rtype: List[List[str]]
"""
d = defaultdict(list)
for w in strs:
key = "".join(sorted(w))
d[key].append(w)
return list(d.values())