给定一个字符串数组,将字母异位词组合在一起。字母异位词指字母相同,但排列不同的字符串。
示例:
输入: ["eat", "tea", "tan", "ate", "nat", "bat"],
输出:
[
["ate","eat","tea"],
["nat","tan"],
["bat"]
]
说明:
所有输入均为小写字母。
不考虑答案输出的顺序。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/group-anagrams
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
两个方式,基本思路都是对复合一个list的对象转换成相同key的思路
package Leetcode; import java.util.*; public class Solution48 { public List<List<String>> groupAnagrams(String[] strs) { if (strs.length == 0) { return new ArrayList<>(); } Map<String, List> ans = new HashMap<>(); for (String s : strs) { char[] ca = s.toCharArray(); Arrays.sort(ca); String key = ca.toString(); if (!ans.containsKey(key)) { ans.put(key, new ArrayList()); } else { ans.get(key).add(s); } } return new ArrayList<>(ans.values()); } public List<List<String>> groupAnagrams2(String[] strs) { if (strs.length == 0) { return new ArrayList<>(); } Map<String, List> ans = new HashMap<>(); int[] count = new int[26]; for (String s : strs) { Arrays.fill(count, 0); for (char c : s.toCharArray()) { count[c - 'a']++; } StringBuilder sb = new StringBuilder(""); for (int i = 0; i < 26; i++) { sb.append("#"); sb.append(count[i]); } String key = sb.toString(); if (!ans.containsKey(key)) { ans.put(key, new ArrayList()); } else { ans.get(key).add(s); } } return new ArrayList<>(ans.values()); } }
end