Group-Anagrams
第22天,今天刷回了Medium
,果然这个难度才适合我。
Given an array of strings, group anagrams together.
For example, given: [“eat”, “tea”, “tan”, “ate”, “nat”, “bat”],
Return:
1 | [ |
Note: All inputs will be in lower-case.
题目很简短,主要的难点是怎样判断两个字符串是同组的(即s1
是s2
的一个置换),我的想法是利用hash
来区分,不过这个hash
函数写起来就比较麻烦了,主要是要考虑碰撞:
1 | unsigned hashString(string &s) { |
然后就是一些细节问题了:
1 | vector<vector<string>> groupAnagrams(vector<string>& strs) { |
dicuss
中有另外一种hash
的方法:
1 | public static List<List<String>> groupAnagrams(String[] strs) { |
额,说实话,里面的数学依据我没看懂,是因为素数只能被1和它本身整除吗?
然后同样是在dicuss
中看到的,对字符串sort
来判断是否在同一组的方法:
1 | vector<vector<string>> groupAnagrams(vector<string>& strs) { |
没想到这道题还有solution
,里面有两个方法,一个是用sort的,和上面的差不多。另一个有趣点,通过计数来生成一个新的字符串,然后在hash
:
1 | public List<List<String>> groupAnagrams(String[] strs) { |