[LeetCode]Group Anagrams

来源:互联网 发布:人工智能 自然语言 编辑:程序博客网 时间:2024/06/06 23:58

Question
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: All inputs will be in lower-case.


本题难度Medium。

【思路】
对单词进行排序得到key,看是否为同一个单词。同时利用一个HashMap变量保存<key,list序号>

【复杂度】
时间 O(NKlogK) 空间 O(N)

【注意】
本题的单词都是lower-case。

【代码】

public class Solution {    public List<List<String>> groupAnagrams(String[] strs) {        //require        List<List<String>> ans=new ArrayList<>();        if(strs==null)            return ans;        Map<String,Integer> map=new HashMap<String,Integer>();        //invariant        int num=0;        for(String s:strs){            String r=sort(s);            if(map.containsKey(r)){                int index=map.get(r);                ans.get(index).add(s);            }else{                map.put(r,num);                ans.add(new ArrayList<String>());                ans.get(num).add(s);                num++;            }        }        //ensure        return ans;    }    private String sort(String s){        char[] chars=s.toCharArray();        Arrays.sort(chars);        return new String(chars);    }}
0 0
原创粉丝点击