给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。
字母异位词 是由重新排列源单词的所有字母得到的一个新单词。
示例 1:
输入: strs = ["eat", "tea", "tan", "ate", "nat", "bat"]
输出: [["bat"],["nat","tan"],["ate","eat","tea"]]
示例 2:
输入: strs = [""]
输出: [[""]]
示例 3:
输入: strs = ["a"]
输出: [["a"]]
Java解法:暴力统计
class Solution {public List<List<String>> groupAnagrams(String[] strs) {Map<Character,Integer>[] maps = new Map[strs.length];Set<Map<Character,Integer>> set = new HashSet<>();for(int i = 0;i < strs.length;i++){maps[i] = statistics(strs[i]);}int index = 0;List<List<String>> res = new ArrayList<>();while (index < strs.length){if(set.contains(maps[index])){index++;continue;}List<String> temp = new ArrayList<>();set.add(maps[index]);temp.add(strs[index]);for(int i = index + 1;i < strs.length;i++){if(maps[index].equals(maps[i])){temp.add(strs[i]);}}res.add(temp);}return res;}public Map<Character,Integer> statistics(String str){Map<Character,Integer> map = new HashMap<>();for(int i = 0;i < str.length();i++){if(!map.containsKey(str.charAt(i))){map.put(str.charAt(i),1);}else {int temp = map.get(str.charAt(i));map.put(str.charAt(i),temp+1);}}return map;}
}
结果:
js解法:
方法一:暴力统计
var groupAnagrams = function(strs) {//解题思路:统计法//用map对每个字符串进行统计let map = new Map()for (let i = 0;i < strs.length;i++) {let str = strs[i]const currMap = new Map()for (let j = 0;j < str.length;j++) {let char = str[j]if (currMap.has(char)) {currMap.set(char,currMap.get(char) + 1)} else {currMap.set(char,1)}}//序列化maplet key = [...currMap].sort().join('')if (map.has(key)) {map.get(key).push(str)} else {map.set(key,[str])}}return [...map.values()]
};
方法二:排序比较法
var groupAnagrams = function(strs) {//解题思路:排队比较法let map = new Map();for (let i = 0;i < strs.length;i++) {let str = strs[i];let key = str.split('').sort().join('');if (map.has(key)) {map.get(key).push(str)} else {map.set(key, [str])}}return [...map.values()];
};