0049. 字母异位词分组

2021-08-23  本文已影响0人  蓝笔头

题目地址

https://leetcode-cn.com/problems/group-anagrams/

题目描述

给定一个字符串数组,将字母异位词组合在一起。字母异位词指字母相同,但排列不同的字符串。

示例:

输入: ["eat", "tea", "tan", "ate", "nat", "bat"]
输出:
[
  ["ate","eat","tea"],
  ["nat","tan"],
  ["bat"]
]
说明:

所有输入均为小写字母。
不考虑答案输出的顺序。

题解

暴力枚举

枚举每一个 str,对其进行排序,其排序后的值作为 key,其原始值作为 value,用 map 存储。

class Solution {
    public List<List<String>> groupAnagrams(String[] strs) {
        Map<String, List<String>> map = new HashMap<>();
        
        for (int i = 0; i < strs.length; ++ i) {
            String value = strs[i];
            String key = sort(value);
            put(key, value, map);
        }

        return map.values().stream().collect(Collectors.toList());
    }

    public String sort(String str) {
        char[] chars = str.toCharArray();
        Arrays.sort(chars);
        return new String(chars);
    }

    public void put(String key, String value, Map<String, List<String>> map) {
        if (!map.containsKey(key)) {
            map.put(key, new ArrayList<String>());
        }

        map.get(key).add(value);
    }
}
上一篇 下一篇

猜你喜欢

热点阅读