【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-有效的字母異位詞
- 438. 找到字串中所有字母異位詞字串
- LeetCode初級演算法之字串:242 有效的字母異位詞LeetCode演算法字串
- C語言重構【242】有效的字母異位詞C語言
- 438. 找到字串中所有字母異位詞(暴力,雙指標)2字串指標
- 漢字-字母-位元組-位之間的轉換
- Leetcode 49 Group AnagramsLeetCode
- SqlServer根據特定欄位分組後,對需要欄位進行分組拼接SQLServer
- LeetCode 49. Group AnagramsLeetCode
- leetcode日記17. 電話號碼的字母組合LeetCode
- leetcode刷題.763. 劃分字母區間.每日打卡LeetCode
- [CareerCup] 11.2 Sort Anagrams Array 異位詞陣列排序陣列排序
- 程式碼隨想錄演算法訓練營第六天| leetcode242.有效的字母異位詞、leetcode349.兩個陣列的交集、leetcode202.快樂數、leetcode1.兩數之和演算法LeetCode陣列
- pandas 分組合並欄位(qbit)
- list集合根據某欄位分組
- Day 6| 242.有效的字母異位詞 、349. 兩個陣列的交集 、 202. 快樂數 、 1. 兩數之和陣列
- 分詞分詞
- 2951 星號組成字母E
- MySQL GROUP BY分組取欄位最大值MySql
- SQL分組中WHERE和HAVING的異同SQL
- LeetCode|劍指 Offer 49.醜數LeetCode
- [LeetCode] Letter Combinations of a Phone Number 電話號碼的字母組合LeetCode
- HanLP分詞工具中的ViterbiSegment分詞流程HanLP分詞Viterbi
- #Elasticsearch中文分詞器 #IK分詞器 @FDDLCElasticsearch中文分詞
- 分詞-1分詞
- Python分詞模組推薦:jieba中文分詞PythonJieba中文分詞
- LeetCode 單詞拆分LeetCode
- js將英文單詞首字母大寫效果JS