给定一个字符串数组,将字母异位词组合在一起。字母异位词指字母相同,但排列不同的字符串。
示例:
输入: ["eat", "tea", "tan", "ate", "nat", "bat"],
输出:
[
["ate","eat","tea"],
["nat","tan"],
["bat"]
]
说明:
所有输入均为小写字母。
不考虑答案输出的顺序。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/group-anagrams
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
用HashMap来存储遍历过程中的结果
法一:
只要两个单词的字母排序后相同,则认为他们是同一组的。key为单词字母排列后的组合。
注意两个return 语句的语法。
执行结果:
通过
执行用时 :23 ms, 在所有 Java 提交中击败了73.72% 的用户
内存消耗 :51.8 MB, 在所有 Java 提交中击败了73.58%的用户
class Solution {
public List<List<String>> groupAnagrams(String[] strs) {
if (strs.length == 0) return new ArrayList();
// List<List<String>> res = new ArrayList<List<String> >();
// if (strs.length == 0)
// return res;
Map<String, List> map = new HashMap<String, List>();
for(String s: strs){
char[] tmp = s.toCharArray();
Arrays.sort(tmp);
String key = String.valueOf(tmp);
if(!map.containsKey(key) )
map.put(key, new ArrayList<>() );
map.get(key).add(s);
}
return new ArrayList(map.values() );
}
}
法二
每个字母对应一个素数,存储一个一维数组,字母在字母表的位置(当前字母 ch, ch-'a'即可计算出其在字母表的位置)即为数组索引值。
对于每个String,计算其每个字母对应的素数乘积,作为HashMap的key。
代码不再贴出。