【leetcode 49】【字母異位詞分組】
leetcode49 字母異位詞分組
給定一個字串陣列,將字母異位片語合在一起。字母異位詞指字母相同,但排列不同的字串。
示例:
輸入: [“eat”, “tea”, “tan”, “ate”, “nat”, “bat”]
輸出:
[
[“ate”,“eat”,“tea”],
[“nat”,“tan”],
[“bat”]
]
解題思路與程式碼思路:
在寫程式碼的時候,發現難點在於對雜湊表和python字典的運用,以及列表中的列表的拆解。寫程式碼或思考時,最好在紙張上畫一下
排序法
排序是對列表中的每個字串做排序,異位詞排完序後是相等的,可以把這個值作為key值放入字典,然後把共同的異位詞都放在一個列表中作為value。在程式碼實現時,有兩個重點:
- sorted(‘str’)得到的結果是列表,因為key值必須是不可變型別,所以要把列表轉化為tuple
- 我們該如何把value存放為列表呢?
ans = collections.defaultdict(list)
,這是一種方法,可以把value值看作list,不過需要導包。例外一種方法就是dict[key] = dict.get(key, []) + [item]
,get方法是獲取key對應的值,若不存在就返回default=[],我們這裡設定為列表,然後把需要新增的元素以列表形式相加即可。
最後也別忘了返回的dict.values需要轉回list
計數法
其實這個方法與上一個的形式很相似,只是把key值用計數的方式儲存。利用只有26個小寫字母的特點,可以使用ascii碼作為key,字母的計數作為value。使用與上面同樣的方式返回正確答案
程式碼:
排序法
class Solution:
def groupAnagrams(self, strs: List[str]) -> List[List[str]]:
dict = {}
for item in strs:
key = tuple(sorted(item))
dict[key] = dict.get(key, []) + [item]
return list(dict.values())
計數法
class Solution:
def groupAnagrams(self, strs: List[str]) -> List[List[str]]:
res = {}
for i in strs:
new_str = [0]*26
for j in i:
new_str[ord(j)-ord('a')] +=1
key = tuple(new_str)
res[key] = res.get(key,[])+[i]
return list(res.values())
復 雜 度 分 析 : \color{red}{複雜度分析:} 復雜度分析:
- 排序法
- 時間複雜度: O(NKlogK),N是列表長度,K是strs中字串長度最大的值
- 空間複雜度:O(NK),排序儲存在字典的空間,有N次,每次最大儲存為K
- 計數法:
- 時間複雜度:O(NK)
- 空間複雜度:O(NK)
相關文章
- LeetCode 49. 字母異位詞分組LeetCode
- Q25 LeetCode49 字母異位詞分組LeetCode
- Leetcode_49_字母異位分組_mapLeetCode
- LeetCode 242 有效的字母異位詞(JAVA)LeetCodeJava
- Leetcode——242:有效字母的異位詞LeetCode
- Q23 LeetCode242 字母異位詞LeetCode
- 有效的字母異位詞
- 《雜湊表》242. 有效的字母異位詞《leetcode》LeetCode
- 讓我們一起啃演算法----字母異位詞分組演算法
- leetcode【每日一題】242. 有效的字母異位詞 javaLeetCode每日一題Java
- leedcode-有效的字母異位詞
- 242. 有效的字母異位詞
- 1202-有效字母異位詞
- LeetCode初級演算法之字串:242 有效的字母異位詞LeetCode演算法字串
- 2024/12/3 【雜湊表】 LeetCode 242.有效的字母異位詞 【x】LeetCode
- 每日一練(44):有效的字母異位詞
- 438. 找到字串中所有字母異位詞字串
- C語言重構【242】有效的字母異位詞C語言
- 438. 找到字串中所有字母異位詞(暴力,雙指標)2字串指標
- Leetcode 49 Group AnagramsLeetCode
- 分組異或
- 程式碼隨想錄演算法訓練營第六天| leetcode242.有效的字母異位詞、leetcode349.兩個陣列的交集、leetcode202.快樂數、leetcode1.兩數之和演算法LeetCode陣列
- LeetCode 49. Group AnagramsLeetCode
- 有效的字母移位詞
- 漢字-字母-位元組-位之間的轉換
- leetcode刷題.763. 劃分字母區間.每日打卡LeetCode
- SQL-分組聚合 - 單欄位分組SQL
- leetcode日記17. 電話號碼的字母組合LeetCode
- HanLP分類模組的分詞器介紹HanLP分詞
- SqlServer根據特定欄位分組後,對需要欄位進行分組拼接SQLServer
- Day 6| 242.有效的字母異位詞 、349. 兩個陣列的交集 、 202. 快樂數 、 1. 兩數之和陣列
- LeetCode|劍指 Offer 49.醜數LeetCode
- [Leetcode]316.去除重複字母LeetCode
- LeetCode 單詞拆分LeetCode
- pandas 分組合並欄位(qbit)
- leetcode 316.去除重複字母 JavaLeetCodeJava
- 位右移 字母大小寫全排列
- list集合根據某欄位分組