给定一个字符串数组,将字母异位词组合在一起。字母异位词指字母相同,但排列不同的字符串。
示例:
输入:["eat", "tea", "tan", "ate", "nat", "bat"]
, 输出: [ ["ate","eat","tea"], ["nat","tan"], ["bat"] ]
题目简单,但是有些值得记录。
思路:
当且仅当它们的排序字符串相等时,两个字符串是字母异位词。
1 #排序后的字符串作为键值 2 class Solution(object): 3 def groupAnagrams(self, strs): 4 from collections import defaultdict 5 ans = collections.defaultdict(list) 6 for s in strs: 7 ans[tuple(sorted(s))].append(s) 8 #ans["".join(sorted(i))].append(i) 9 return ans.values()
补:
1、count字符出现数,再由长度为26的列表计数(a-z数量)→转元祖作为键值。
2、美版leetcode有人用不同质数表示26个字母,相乘作为键值。
判断是否为质数思路:
对正整数n,如果用2到√n之间的所有整数去除,均无法整除,则n为质数
1 from math import sqrt 2 #定义一个是否素数函数,如果n等于1,则返回false 3 def is_prime(n): 4 if n == 1: 5 return False 6 for i in range(2,int(sqrt(n))+1): 7 if n%i == 0: 8 return False 9 return True