算法9 Group Anagrams

题目:给出一组字符串,把 字母相同顺序不同的词 分成一类

例如,给出: ["eat", "tea", "tan", "ate", "nat", "bat"],

返回:

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

思路:对数组遍历,取出每个字符串进行排序,将排序过后相同的字符串作为Map的key传入,然后value传入排序之前的字符串的集合。

代码:

public List> groupAnagrams(String[] strs) {
    //若输入为空则直接返回
    if (strs == null || strs.length == 0) return new ArrayList>();
    Map> map = new HashMap>();
    Arrays.sort(strs);
    for (String s : strs) {
        char[] c = s.toCharArray();
        //取出每个字符串进行排序
        Arrays.sort(c);
        String keyStr = String.valueOf(c);
        //排序过后相同的字符串作为Map的key传入
        if (!map.containsKey(keyStr)) map.put(keyStr, new ArrayList());
        //value传入排序之前的字符串的集合
        map.get(keyStr).add(s);
    }
    return new ArrayList>(map.values());
}

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