Leetcode演算法Java全解答--49. 字母異位詞分組
阿新 • • 發佈:2018-12-10
Leetcode演算法Java全解答–49. 字母異位詞分組
文章目錄
題目
給定一個字串陣列,將字母異位詞組合在一起。字母異位詞指字母相同,但排列不同的字串。
說明:
所有輸入均為小寫字母。
不考慮答案輸出的順序。
示例
輸入: ["eat", "tea", "tan", "ate", "nat", "bat"], 輸出: [ ["ate","eat","tea"], ["nat","tan"], ["bat"] ]
想法
用一個hashMap<String, List>來儲存出現的單詞
key是單詞進行排序之後的資料(比如eat、tea、ate,這些的key都是aet)
value是陣列
結果
超過97%的測試案例
時間複雜度/空間複雜度:n/n
總結
// TODO
程式碼
我的答案
public List<List<String>> groupAnagrams(String[] strs) { if (strs.length == 0) { return Collections.emptyList(); } Map<String, List<String>> ans = new HashMap<>(); for (String str : strs) { char[] chars = str.toCharArray(); Arrays.sort(chars); String key = String.valueOf(chars); if (!ans.containsKey(key)) { ans.put(key, new ArrayList<String>()); } ans.get(key).add(str); } return new ArrayList(ans.values()); }
大佬們的答案
class Solution { public List<List<String>> better(String[] strs) { if (strs.length == 0) { return Collections.emptyList(); } Map<String, List> ans = new HashMap<String, List>(); int[] count = new int[26]; for (String s : strs) { Arrays.fill(count, 0); for (char c : s.toCharArray()) { count[c - 'a']++; } StringBuilder sb = new StringBuilder(""); for (int i = 0; i < 26; i++) { sb.append('#'); sb.append(count[i]); } String key = sb.toString(); if (!ans.containsKey(key)) { ans.put(key, new ArrayList()); } ans.get(key).add(s); } return new ArrayList(ans.values()); } }
測試用例
@Test
public void test049() {
// 建立測試案例
String[] arr1 = new String[] { "eat", "tea", "tan", "ate", "nat", "bat" };
// 測試案例期望值
List<List<String>> expResult1 = new ArrayList<>();
List<String> list1 = new ArrayList<>();
list1.add("ate");
list1.add("eat");
list1.add("tea");
List<String> list2 = new ArrayList<>();
list2.add("nat");
list2.add("tan");
List<String> list3 = new ArrayList<>();
list3.add("bat");
expResult1.add(list1);
expResult1.add(list2);
expResult1.add(list3);
// 執行方法
Solution049 solution049 = new Solution049();
List<List<String>> result1 = solution049.groupAnagrams(arr1);
// 判斷期望值與實際值
Assert.assertEquals(expResult1, result1);
}
其他
程式碼託管碼雲地址:https://gitee.com/lizhaoandroid/LeetCodeAll.git
檢視其他內容可以點選專欄或者我的部落格哈:https://blog.csdn.net/cmqwan
“大佬們的答案” 標籤來自leetcode,侵權請聯絡我進行刪改
如有疑問請聯絡,聯絡方式:QQ3060507060