import java.util.*; /** * NC294 字母异位词分组 * @author d3y1 */ public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param strs string字符串一维数组 * @return string字符串二维数组 */ public String[][] groupAnagrams (String[] strs) { // return solution1(strs); return solution2(strs); } /** * 排序+哈希 * @param strs * @return */ private String[][] solution1(String[] strs){ HashMap<String, ArrayList<String>> map = new HashMap<>(); String key; char[] chars; ArrayList<String> list; for(String str: strs){ chars = str.toCharArray(); Arrays.sort(chars); key = String.valueOf(chars); if(map.containsKey(key)){ list = map.get(key); }else{ list = new ArrayList<>(); } list.add(str); map.put(key, list); } String[][] result = new String[map.size()][]; int i = 0; for(String keyWord: map.keySet()){ list = map.get(keyWord); result[i] = new String[list.size()]; for(int j=0; j<list.size(); j++){ result[i][j] = list.get(j); } i++; } return result; } /** * 排序+哈希: 简化 * @param strs * @return */ private String[][] solution2(String[] strs){ HashMap<String, ArrayList<String>> map = new HashMap<>(); String key; char[] chars; ArrayList<String> list; for(String str: strs){ chars = str.toCharArray(); Arrays.sort(chars); key = String.valueOf(chars); if(map.containsKey(key)){ list = map.get(key); }else{ list = new ArrayList<>(); } list.add(str); map.put(key, list); } String[][] result = new String[map.size()][]; int i = 0; for(String keyWord: map.keySet()){ list = map.get(keyWord); result[i] = new String[list.size()]; list.toArray(result[i]); i++; } return result; } }