1. 程式人生 > 其它 >49.字母異位詞分組

49.字母異位詞分組

技術標籤:# 字串處理專題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()); } }

在這裡插入圖片描述