LeetCode-Group Anagrams

Posted by mapoto4 on 2017-07-22

题目

Given an array of strings, group anagrams together.

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

Return:

1
2
3
4
5
[
["ate", "eat","tea"],
["nat","tan"],
["bat"]
]

解题思路

这道题是把相同字符组成的单词进行分组,可以通过HashMap进行存储判断。
首先将每个字符串转换成char进行排序,HashMap的key存放排序好的词,value存放原始值。
如果排序好的词语在HashMap中没有出现过,就把这个排序好的词放到HashMap里,否则加入到返回结果。

代码

public static List<List<String>> groupAnagrams(String[] strs) {
    List<List<String>> result = new ArrayList<List<String>>();
    int length = strs.length;
    if (length < 1)
        return result;
    Map<String, List<String>> map = new HashMap<String, List<String>>();
    String temp = "";
    for (int i = 0; i < length; i++) {
        temp = strs[i];
        char[] arryOfString = temp.toCharArray();
        Arrays.sort(arryOfString);
        temp = new String(arryOfString);
        if (map.containsKey(temp)) {
            map.get(temp).add(strs[i]);
        }else {
            List<String> item = new ArrayList<String>();
            item.add(strs[i]);
            map.put(temp, item);
        }
    }
    for (List<String> value : map.values()) {
    result.add(value);
    }
    return result;
}