leetcode:(49) Group Anagrams(java)
阿新 • • 發佈:2018-11-06
題目:
Given an array of strings, group anagrams together.
Example:
Input: ["eat", "tea", "tan", "ate", "nat", "bat"]
Output:
[
["ate","eat","tea"],
["nat","tan"],
["bat"]
]
題目分析:
本題的要求是將各組字元按照字母構成相同與否進行分組,不同字母組合分為一組,然後按照字典順序排序。
將字串排序,然後將排序後的字元作為hashmap的鍵,沒有排序的字串作為值,
如果發現鍵相同,則取出值,並加新的串拼接起來即可
最後遍歷map,把字串取出,再把字串變成字元陣列即可,
注意字串為空的情況
程式碼如下:
package LeetCode_HashTable; import java.util.*; public class GroupAnagrams_49_1023 { public List<List<String>> GroupAnagrams(String[] strs){ if (strs == null || strs.length == 0) { return new ArrayList<List<String>>(); //判斷是否合法輸入 } Map<String, List<String>> map = new HashMap<>(); for (String s : strs) { char[] array = s.toCharArray(); //把字串轉換成字元陣列 Arrays.sort(array); //將字元陣列進行升序排序 String temp1 = String.valueOf(array); //將排序後的字元陣列轉換成字串 if (!map.containsKey(temp1)) { map.put(temp1, new ArrayList<String>()); //如果map裡面不包含temp1鍵,則將其新增到map中,並將其鍵值設定為空 } map.get(temp1).add(s); //找到在map中鍵temp1的鍵值,並將s新增到鍵值裡面 } return new ArrayList<List<String>>(map.values()); } }