49 字母異位詞分組

2021-10-24 11:16:18 字數 1981 閱讀 3440

難度中等455

給定乙個字串陣列,將字母異位片語合在一起。字母異位詞指字母相同,但排列不同的字串。

示例:

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

["ate","eat","tea"],

["nat","tan"],

["bat"]

]

說明:思考這題思路其實是最簡單的,對每個單詞,用乙個長度26陣列,記錄每個字母個數,相同位置字母個數全相同,則歸為同一類,新增到map同乙個key的值陣列中。

1.如何將a,b,c的個數儲存到陣列對應的位置?

2.如何將單詞儲存到map當中?

**實現

/**

* @param strs

* @return

*/var groupanagrams = function(strs)

const map =new map()

for (let str of strs)

const key = characters.join() //陣列要轉成字串才能用

if(map.has(key)) else

}const result =

for (let item of map)

return result

};

知識在寫**的時候,遇到幾個點,特別的細節,在這裡重點說一下。

1.arr.push()返回的是陣列的長度,而不是新陣列。

//最開始的版本,實際上是把陣列的長度當成了key的值傳進去了,顯然是不對的

if(map.has(key)) else

//改進後,map.get(key)獲取陣列,push之後,再將新的陣列傳入,但**有點亂

if(map.has(key)) else

//用temp儲存原先的陣列,push進入新的值後,temp再當做value傳入

if(map.has(key)) else

2.陣列轉化成字串,注意用什麼連線。一開始用的是const key = characters.join('''').這樣有什麼問題呢。先看個例子。

發現了什麼,用("")拼接是無縫的,也就是[1,0,1,0,10]和[1,0,10,1,0] 就被轉化成了同乙個字串

下面看測試用例

這會造成什麼結果?就是bdddddddddd和bbbbbbbbbbc的key會變成同乙個字串,從而歸為一類,真的是太壞了!!

而用join()無引數拼接後,中間就有逗號加以區別。

3.ascii碼可以將a,b,c...儲存到指定的位置,a的ascii碼是97,那麼a-97=0,正好對應陣列的第乙個下標。

4.遍歷map可以,for(item of map), 每個item是乙個陣列,item[0]是key, item[1]是value.

49 字母異位詞分組

給定乙個字串陣列,將字母異位片語合在一起。字母異位詞指字母相同,但排列不同的字串。示例 輸入 eat tea tan ate nat bat 輸出 ate eat tea nat tan bat 說明 所有輸入均為小寫字母。不考慮答案輸出的順序。思路 這個題的思路非常清晰,遍歷字串陣列,對其中每乙個...

49 字母異位詞分組

arrays.sort排序的時間複雜度為o slogs 外面還有n次迴圈,總共為nslogs,s為字串的長度。空間複雜度為o ns hashmap儲存了每個字串 1 我對arraylist操作不熟,還有arrays.sort 得趕緊學習了 2 乙個字串會有原始字元,所以只要知道原始字元,原始字元下一...

49 字母異位詞分組

給定乙個字串陣列,將字母異位片語合在一起。字母異位詞指字母相同,但排列不同的字串。示例 輸入 eat tea tan ate nat bat 輸出 ate eat tea nat tan bat 1.對每個子串排序生成乙個新的陣列,構造乙個字典d,遍歷新陣列往字典裡放 o nklogk o nk 2...