king-lps

1. 原始题目

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

示例:

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

说明:

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

2. 思路

方法1:将字符串分别排序后判定是否是异位次

方法2:将字符串利用字母表计数后判定是否是异位次

3. 解题

首先复习几个知识点:

1)chr() 函数用一个整数作参数,返回值是当前整数对应的 ASCII 字符。

>>>chr(0x30)
\'0\'
>>> chr(97) 
\'a\'
>>> chr(8364)
\'\'

 

2)  ord() 函数是 chr() 函数(对于8位的ASCII字符串)或 unichr() 函数(对于Unicode对象)的配对函数,它以一个字符(长度为1的字符串)作为参数,返回对应的 ASCII 数值,或者 Unicode 数值,如果所给的 Unicode 字符超出了你的 Python 定义范围,则会引发一个 TypeError 的异常。

>>>ord(\'a\')
97
>>> ord(\'b\')
98
>>> ord(\'c\')
99

 

3)python字典get方法

Python 字典(Dictionary) get() 函数返回指定键的值,如果值不在字典中返回默认值。

ict.get(key, default=None)
dict = {\'Name\': \'Zara\', \'Age\': 27}

print "Value : %s" %  dict.get(\'Age\')
print "Value : %s" %  dict.get(\'Sex\', "Never")

Value : 27
Value : Never

 

4)python字典 setdefault()方法

 Python 字典 setdefault() 函数和 get()方法 类似, 如果键不存在于字典中,将会添加键并将值设为默认值。

dict = {\'runoob\': \'菜鸟教程\', \'google\': \'Google 搜索\'}
 
print "Value : %s" %  dict.setdefault(\'runoob\', None)
print "Value : %s" %  dict.setdefault(\'Taobao\', \'淘宝\')

Value : 菜鸟教程
Value : 淘宝

 

正式解题(several ways):

方法1:排序后的字符串作为键

1 class Solution(object):
2     def groupAnagrams(self, strs):
3         ans = collections.defaultdict(list)   # 默认值为list
4         for s in strs:
5             ans[tuple(sorted(s))].append(s)   # 注意字典的键必须为可哈希,所以应转为tuple
6         return list(ans.values())
1 class Solution:
2     def groupAnagrams(self, strs: \'List[str]\') -> \'List[List[str]]\':
3         
4         ind = {}
5         for s in strs:
6             k = \'\'.join(sorted(s))
7             ind.setdefault(k, []).append(s)
8         
9         return list(ind.values())

 

方法2:计数后的字符串作为键。利用26个小写字母计数。

1 class Solution:
2     def groupAnagrams(strs):
3         ans = collections.defaultdict(list)
4         for s in strs:
5             count = [0] * 26      # 26个字母分别计数,如果计数完全相同的两个字符串则视为异位词
6             for c in s:
7                 count[ord(c) - ord(\'a\')] += 1    # ord将字符转为整型
8             ans[tuple(count)].append(s)
9         return ans.values()

 

分类:

技术点:

相关文章: