给定一个字符串数组 strs ,将 变位词 组合在一起。 可以按任意顺序返回结果列表。
注意:若两个字符串中每个字符出现的次数都相同,则称它们互为变位词。
示例 1:
输入: strs = [“eat”, “tea”, “tan”, “ate”, “nat”, “bat”]
输出: [[“bat”],[“nat”,“tan”],[“ate”,“eat”,“tea”]]
示例 2:
输入: strs = [""]
输出: [[""]]
示例 3:
输入: strs = [“a”]
输出: [[“a”]]
提示:
1 <= strs.length <= 104
0 <= strs[i].length <= 100
strs[i] 仅包含小写字母
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/sfvd7V
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
第一种方法是使用乘法,把 a - z 分别使用 2 3 5 7 等质数进行表示,然后进行乘法,就像 java 中 static final 等修饰词一样,但是存在一个问题,就是单词足够长的时候,会出现越界的情况,所以,我们使用排序进行解答:
首先,定义一个 map,将 字符串变成字符数组进行排序,然后再转为字符串,存放在对应的 map 中,最后返回 map 的所有值信息即可。
class Solution {
public List<List<String>> groupAnagrams(String[] strs) {
Map<String, List<String> > map = new HashMap<>();
for (String s : strs) {
char[] array = s.toCharArray();
Arrays.sort(array);
String ss = new String(array);
map.putIfAbsent(ss, new LinkedList<String>());
map.get(ss).add(s);
}
return new LinkedList<>(map.values());
}
}