跳转至

哈希表

49.字母异位词分组

给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。字母异位词 是由重新排列源单词的所有字母得到的一个新单词。

示例 1:

输入: strs = ["eat", "tea", "tan", "ate", "nat", "bat"] 输出: [["bat"],["nat","tan"],["ate","eat","tea"]]

解法一 哈希表

使用哈希表,key是重排序的后的单词,值是字母异位词分组的List。

哈希表
  public List<List<String>> groupAnagrams(String[] strs) {
      Map<String, List<String>> map = new LinkedHashMap<>();
      for (String str : strs) {
          String key = genKey(str);
          List<String> list = map.get(key);
          if (list == null) {
              list = new LinkedList<>();
          }
          list.add(str);
          map.put(key, list);
      }
      return new ArrayList<>(map.values());
  }

  private int[] dict = new int[26];
  private String genKey(String str) {
      Arrays.fill(dict, 0);
      for (int i = 0; i < str.length(); i++) {
          char c = str.charAt(i);
          dict[c - 'a']++;
      }
      StringBuilder builder = new StringBuilder();
      for(int i = 0; i < dict.length; i++) {
          if (dict[i] > 0) {
              builder.append('a' + i).append(dict[i]);
          }
      }
      return builder.toString();
  }