1. 程式人生 > >LeetCode 第49題 字母異位詞分組

LeetCode 第49題 字母異位詞分組

兩個 add arraylist 等於 說明 順序 外部 字符串排序 sort

(一) 題目描述  

  給定一個字符串數組,將字母異位詞組合在一起。字母異位詞指字母相同,但排列不同的字符串。

  示例:

  輸入: ["eat", "tea", "tan", "ate", "nat", "bat"],
  輸出:
  [
    ["ate","eat","tea"],
    ["nat","tan"],
    ["bat"]
  ]

  說明:

  • 所有輸入均為小寫字母。
  • 不考慮答案輸出的順序。


(二) 解題思路

  1 什麽是字母異位詞?

    就是兩個單詞包含相同的字母,但是順序不一樣,則成為字母異位詞.

     toCharArray() 方法將字符串轉換為字符數組。

    String.valueOf(xxx) 將xxx轉換為String 類型

  2 算法思路

    使用HashMap的鍵值對形式

    將排序字符串 作為一個 K

    將初始輸入的字符串列表 作為 值(V 對其排序後等於K)

  3 繪圖一張

  技術分享圖片


(三)LeetCode AC代碼

  排序數組分類

class Solution {
    public List<List<String>> groupAnagrams(String[] strs) {
        
        if(strs.length==0)
            
return new ArrayList(); Map<String,List> ans = new HashMap<String,List>(); for(String s : strs){ char[] ca = s.toCharArray(); Arrays.sort(ca); String key = String.valueOf(ca); if(!ans.containsKey(key)) ans.put(key,
new ArrayList()); ans.get(key).add(s); } return new ArrayList(ans.values()); } }

  復雜度分析:

  1. 時間復雜度:O(NK logK),其中N是strs的長度,而K是strs中字符串的最大長度.當我們遍歷每個字符串時,外部循環具有的復雜度為O(N).然後,我們在O(KlogK)的時間內對每個字符串排序.
  2. 空間復雜度:O(NK),排序存儲在ans中的全部信息內容.


    當生活需要讓你成長的時候,

      總會讓你遇到一些讓你不順心的人或事

LeetCode 第49題 字母異位詞分組