做腳本的網(wǎng)站新聞熱點最新事件
題目描述:
49. 字母異位詞分組
難度 中等
給你一個字符串?dāng)?shù)組,請你將?字母異位詞?組合在一起??梢园慈我忭樞蚍祷亟Y(jié)果列表。
字母異位詞?是由重新排列源單詞的所有字母得到的一個新單詞。
示例 1:
輸入: strs = ["eat", "tea", "tan", "ate", "nat", "bat"]
輸出: [["bat"],["nat","tan"],["ate","eat","tea"]]
示例 2:
輸入: strs = [""]
輸出: [[""]]
示例 3:
輸入: strs = ["a"]
輸出: [["a"]]
解題思路分析:
?題目意思簡而言之就是,所有輸入的單詞,不關(guān)注單詞中字母的排列順序,只要字母都相同的就分為一組。
那么我們可以創(chuàng)建一個map集合,map集合的key存放每個單詞排序后的字符串,map集合的value存放一個List集合(該集合中存放所有字母都相同的單詞)。
實現(xiàn)步驟:
1.將輸入的字符串?dāng)?shù)組分別循環(huán)取出
2.取出字符數(shù)組中的單個字符串后,再將將每個字符串轉(zhuǎn)成字符數(shù)組
3.把字符數(shù)組排序后再轉(zhuǎn)成字符串作為map集合的key
4.查看map集合中是否有排序后字符串的key對應(yīng)的值,沒有則對該key創(chuàng)建一個value值(ArrayList<String>)
5.將當(dāng)前的字符串存放到當(dāng)前key對應(yīng)的map集合中
6.創(chuàng)建一個ArrayList集合存入所有map集合的value后返回【return ArrayList<List<String>>(map.values())】
注意:List<String> list = map.getOrDefault(key, new ArrayList<String>()); 這里用List接收(向上轉(zhuǎn)型,這個是java基礎(chǔ)不清楚的小伙伴可以去回顧一下這里不再贅述)
代碼:?
class Solution {public List<List<String>> groupAnagrams(String[] strs) {Map<String, List<String>> map = new HashMap();// 循環(huán)每個字符串?dāng)?shù)組for (String str : strs) {// 將字符串?dāng)?shù)組轉(zhuǎn)成字符數(shù)組char[] chars = str.toCharArray();// 將字符數(shù)組中的字符排序Arrays.sort(chars);// 將排序后的字符數(shù)組轉(zhuǎn)成新的排序后字符串String key = new String(chars);// 獲取當(dāng)前map集合中key對應(yīng)的list集合,沒有則新建一個list集合List<String> list = map.getOrDefault(key, new ArrayList<String>());// 將當(dāng)前字符串添加到list集合中l(wèi)ist.add(str);// 存入排序后的字符串作為key,存入當(dāng)前字符串map.put(key, list);}// 取出map中的所有value放入ArrayList集合中返回 return new ArrayList<List<String>>(map.values());}
}
?最后大功告成!?
?