Group Anagrams 同字母异序String的分组

Given an array of strings, group anagrams together.

For example, given: ["eat", "tea", "tan", "ate", "nat", "bat"]
Return:

[
  ["ate", "eat","tea"],
  ["nat","tan"],
  ["bat"]
]

ate, eat, tea这些单词中的字母是相同的,只是顺序不同,所以被分到了同一组。

如何确定2个String是同字母异序的呢?

如果ate里面的字母进行排序,变成 aet。

同样的eat里面的字母进行排序,变成aet。

比较排序后的结果,就能确定是不是同字母异构的了。

所以我们可以构建这样的一个map: string   ->  list其中的key就是字符串里面的字母排序后的结果。

2个String, 排序后相同形成的字符串相同,那么就会被放置在一起了。

运行时间:

Group Anagrams 同字母异序String的分组_第1张图片

代码:

public class GroupAnagrams {
    public List> groupAnagrams(String[] strs) {
        Map> map = new HashMap<>();
        for (String str : strs) {
            char[] ca = str.toCharArray();
            Arrays.sort(ca);//get sorted value as key
            String keyStr = String.valueOf(ca);
            if (!map.containsKey(keyStr)) {
                map.put(keyStr, new ArrayList<>());
            }
            map.get(keyStr).add(str);
        }
        return new ArrayList<>(map.values());
    }
}

你可能感兴趣的:(leetcode)