算法49. Group Anagrams

49. Group Anagrams
Given an array of strings, group anagrams together.

Example:

Input: ["eat", "tea", "tan", "ate", "nat", "bat"],
Output:
[
  ["ate","eat","tea"],
  ["nat","tan"],
  ["bat"]
]

Note:

All inputs will be in lowercase.
The order of your output does not matter.

class Solution {
    public List> groupAnagrams(String[] strs) {
        
    }
}

分类相同字母异序词,给一个字符串数组,把相同字母异序词放在一起。
Note:

  • 所有的输入都是小写
  • 顺序不重要

解:
思路一:暴力遍历,一个 List>,里面装 set,set 装 每个字符串的最小子串。依次遍历,判断当前字符串的所有子串是否存在 set 中,存在,则加入到对应位置;都不存在,则新建一个 set。
思路二:在思路一的基础上,改用map,把字符串转成 char[] 排序,再转成 String,这样就不用 set 去判断每个子串,直接判断字符串是否存在即可。代码如下:

public List> groupAnagrams(String[] strs) {
    if (strs == null || strs.length == 0) {
        return new ArrayList>();
    }
    Map> map = new HashMap>();
    for (String s : strs) {
        char[] ca = s.toCharArray();
        Arrays.sort(ca);
        String keyStr = String.valueOf(ca);
        if (!map.containsKey(keyStr)) {
            map.put(keyStr, new ArrayList());
        }
        map.get(keyStr).add(s);
    }
    return new ArrayList>(map.values());
}

你可能感兴趣的:(算法49. Group Anagrams)