原题链接在这里:https://leetcode.com/problems/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: All inputs will be in lower-case.
题解:
用sort的方式找出anagram的base型,用来当HashMap的key.
Time Complexity: O(nlogn * strs.length), n是strs中最长string的长度. Space: O(hm.size()), HashMap size.
AC Java:
1 public class Solution { 2 public List<List<String>> groupAnagrams(String[] strs) { 3 if(strs == null || strs.length == 0){ 4 return new ArrayList<List<String>>(); 5 } 6 7 HashMap<String, List<String>> hm = new HashMap<String, List<String>>(); 8 for(String str : strs){ 9 char [] charArr = str.toCharArray(); 10 Arrays.sort(charArr); 11 String sortedStr = new String(charArr); 12 if(!hm.containsKey(sortedStr)){ 13 List<String> ls = new ArrayList<String>(); 14 hm.put(sortedStr, ls); 15 } 16 hm.get(sortedStr).add(str); 17 } 18 return new ArrayList<List<String>>(hm.values()); 19 } 20 }