題目鏈接:49. 字母異位詞分組 - 力扣(LeetCode)
題目:
給你一個字符串數組,請你將?字母異位詞?組合在一起。可以按任意順序返回結果列表。
示例 1:
輸入:?strs = ["eat", "tea", "tan", "ate", "nat", "bat"]
輸出:?[["bat"],["nat","tan"],["ate","eat","tea"]]
解釋:
- 在 strs 中沒有字符串可以通過重新排列來形成?
"bat"
。 - 字符串?
"nat"
?和?"tan"
?是字母異位詞,因為它們可以重新排列以形成彼此。 - 字符串?
"ate"
?,"eat"
?和?"tea"
?是字母異位詞,因為它們可以重新排列以形成彼此。
示例 2:
輸入:?strs = [""]
輸出:?[[""]]
示例 3:
輸入:?strs = ["a"]
輸出:?[["a"]]
提示:
1 <= strs.length <= 104
0 <= strs[i].length <= 100
strs[i]
?僅包含小寫字母
整體思路:
這道題需要用到hash表來解答,我用的是HashMap數據結構,遍歷字符數組將每一個字符串排序,并以這個排序好的字符串為key,字母組成相同的字符串放入該key的map集合中,最后返回結果就行。
Java代碼:
class Solution {public List<List<String>> groupAnagrams(String[] strs) {Map<String,List<String>>map=new HashMap<>();for(String str:strs){char[] s=str.toCharArray();Arrays.sort(s);String key=new String(s);List<String>list= map.getOrDefault(key,new ArrayList<>());list.add(str);map.put(key,list);}return new ArrayList<List<String>>(map.values());}
}
前置知識講解:?
Java中的getOrDefault方法:
getOrDefault是Java中Map接口的一個方法,它用于從Map中獲取指定鍵(key)對應的值(value)。如果Map中不存在該鍵,則返回一個預先設定的默認值。
V value = map.getOrDefault(Object key, V defaultValue);
解題步驟:
創建一個以String為key,List<String>為value的HashMap集合,遍歷strs字符串數組,調用toCharArray()方法將字符串轉換為字符數組,并調用Arrays的sort排序方法將字符數組排序,之后再將該字符數組轉換為字符串,調用Map的getOrDefault方法?,如果map集合中存在該key,那就返回該key對應的字符串集合,如果不存在就創建一個新的List集合,再將當前的str字符串填入返回的字符串集合或是新創建的list集合,更新一下map集合中該key的值,最后調用values()方法返回即可。