Group Anagrams 异位构词

Given an array of strings, group anagrams together.

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

[
  ["ate", "eat","tea"],
  ["nat","tan"],
  ["bat"]
]
Note:
For the return value, each inner list's elements must follow the lexicographic order.
All inputs will be in lower-case.

有关异构字符串的题目,这道题让我们从一个字符串数组中将异构字符串分组,并且每组中是按照字母顺序排列的。
我们可以借助哈希表来完成。创建一个哈希表,让它的key为String,value为一个链表。每次从数组中取一个元素后,我们可以先将它转化为字符数组,然后排序后转换为一个字符串,这样一来所有的异构字符串都会变为相同一个在一个字符串,哈希表中的key就存放这个转换后的串。这样就可以把异构字符串分组了。代码如下:
public class Solution {
    public List<List<String>> groupAnagrams(String[] strs) {
        HashMap<String, List<String>> hm = new HashMap<String, List<String>>();
        List<List<String>> llist = new ArrayList<List<String>>();
        if(strs == null || strs.length == 0) return llist;
        for(int i = 0; i < strs.length; i++) {
            char[] tem = strs[i].toCharArray();
            Arrays.sort(tem);
            String s = new String(tem);
            if(!hm.containsKey(s)) {
                hm.put(s, new ArrayList<String>());
            }
            hm.get(s).add(strs[i]);
        }
        for(List list : hm.values()) {
            Collections.sort(list);
            llist.add(list);
        }
        return llist;
    }
}

猜你喜欢

转载自kickcode.iteye.com/blog/2275065
今日推荐