49.字母異位詞分組
阿新 • • 發佈:2021-02-15
技術標籤:# 字串處理專題leetcodejava資料結構字串
49. 字母異位詞分組
給定一個字串陣列,將字母異位詞組合在一起。字母異位詞指字母相同,但排列不同的字串。
示例:
輸入: ["eat", "tea", "tan", "ate", "nat", "bat"] 輸出: [ ["ate","eat","tea"], ["nat","tan"], ["bat"] ]
說明:
- 所有輸入均為小寫字母。
- 不考慮答案輸出的順序。
思路:
我們不難發現每一組的單詞字母是相同的,只是排列不同而已,那麼我們如果將這些排列不同的單詞,按字母順序進行排序,則他們是一樣的,如
排序前 排序後
ate aet
eat aet
tea aet
因此我們可以用一個HashMap<String,List<String>>
來完成分組,其中key
是單詞按字母序排序後的形式,value
則是所有按字母序排序後是key
的單詞的集合,由此即完成了分組的任務。
Java程式碼
class Solution {
public List< List<String>> groupAnagrams(String[] strs) {
if(strs == null || strs.length == 0) return new ArrayList<>();
Map<String,List<String>> map = new HashMap<>();
for(String str : strs){
//對str按字母序排序
char[] chs = str.toCharArray( );
Arrays.sort(chs);
if(!map.containsKey(String.valueOf(chs))){
List<String> list = new ArrayList<>();
map.put(String.valueOf(chs),list);
}
map.get(String.valueOf(chs)).add(str);
}
return new ArrayList<>(map.values());
}
}