物以類聚 尋找共同的字元_字典應用_Leetcode #1002

更新於 發佈於 閱讀時間約 3 分鐘

題目敘述

給定一個字串陣列,請把它們所共有的字元伴隨著出現次數輸出

例如:每個字串都有兩個a,三個b,則輸出["a","a","b","b","b"]


測試範例

Example 1:

Input: words = ["bella","label","roller"]
Output: ["e","l","l"]

Example 2:

Input: words = ["cool","lock","cook"]
Output: ["c","o"]

約束條件

Constraints:

  • 1 <= words.length <= 100

每個單字的長度介於1~100之間。

  • 1 <= words[i].length <= 100

輸入陣列有1~100個單字。

  • words[i] consists of lowercase English letters.

每個單字只會有小寫英文字母。


觀察

共有的字元怎麼找?

其實就是交集的部分。

每個單字取交集,得到的就是共同的字元。


如果再考慮出現次數,可以使用字典統計每個字元的出現次數,再逐一對每個單字產生的字典取交集,得到的就是共同的字元伴隨著共有的出現次數


演算法 字典統計出現次數+字典取交集

承接觀察點的思考。

針對每個單字建立字典,統計每個字元的出現次數

接著對每個字典取交集,得到的就是共同的字元,伴隨著共有的出現次數


程式碼 字典統計出現次數+字典取交集

from collections import Counter
from functools import reduce

class Solution:
def commonChars(self, A: List[str]) -> List[str]:

# Base case:
A[0] = Counter(A[0])

# functor to evaluate intersection of Counter
func = lambda x, y: x & Counter(y)

# update dictionary for common characters by itersection of Counter
str_occ_dict = reduce( func, A)

return list( str_occ_dict.elements() )

複雜度分析

時間複雜度: O(n)

掃描過每個單字,統計每個英文字母的出現次數,接著取交集。


空間複雜度: O(n)

需要建立字典,題目已經說都是小寫英文字母,最多只會占用O(26*n) = O(n)的空間。


關鍵知識點

集合(Set): 檢查元素是否存在。

字典(HashMap, Dictionary): 統計元素的出現次數。

以本題來說,字典比集合更符合需求,是比較直覺也比較適合的資料結構。


Reference

[1] Find Common Characters - LeetCode

avatar-img
90會員
425內容數
由有業界實戰經驗的演算法工程師, 手把手教你建立解題的框架, 一步步寫出高效、清晰易懂的解題答案。 著重在讓讀者啟發思考、理解演算法,熟悉常見的演算法模板。 深入淺出地介紹題目背後所使用的演算法意義,融會貫通演算法與資料結構的應用。 在幾個經典的題目融入一道題目的多種解法,或者同一招解不同的題目,擴展廣度,並加深印象。
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
給定一個字串s,以s擁有的字元製造迴文字串。要能製造出的迴文字串長度最長是多少,觀察迴文字串不外乎兩種模式對稱部分 + 核心字元 + 對稱部分,其中,核心字元在正中央出現一次,或者 對稱部分 + 對稱部分。使用演算法統計出現次數並推理出盡可能充分利用每個字元的迴文字串製造方法。
給定一個二維的二元矩陣,計算正方形的最大面積。利用DP演算法及最大化正方形邊長的方法,遍歷矩陣,釐清DP初始狀態並推導出DP狀態轉移關係式。複雜度分析說明了時間複雜度和空間複雜度。關鍵知識點是找出最大的正方形邊長。
Append Characters to String to Make Subsequence 給定兩個字串s和字串t。 請計算最少的字元串接數量是多少,串接在s的尾端,使得t是s的子序列。 測試範例 Example 1: Input: s = "coaching", t =
通過 取捨與否的最佳策略 來獲得 最高的分數。文章中運用了類似House Robbery的DP模型來解決這個問題。通過演算法化簡的技巧,將這個問題化簡到 相鄰物不可同時選擇的DP模型。同時,強烈建議同時複習House Robbery,熟悉DP演算法框架和掌握演算法化簡的技巧。
了解如何使用in-place原位操作及O(1)常數空間的演算法來反轉給定的字串陣列。藉由雙指針演算法,每回合對調左右兩個指針對應到的字元,並且逐漸往中心靠攏,由外而內進行反轉。詳細的演算法與複雜度分析也在文章中呈現。
動態規劃Dynamic Programming其實是 一種泛用的演算法思考方式與演算法建構框架。 動態規劃並不拘束於只能解課本上特定的的範例題。 只要我們能找出DP狀態定義、DP遞迴結構、初始條件(終止條件),就能適用動態規劃來解題,以數學的形式表達,並且在紙筆上或者電腦上、計算機上計算
給定一個字串s,以s擁有的字元製造迴文字串。要能製造出的迴文字串長度最長是多少,觀察迴文字串不外乎兩種模式對稱部分 + 核心字元 + 對稱部分,其中,核心字元在正中央出現一次,或者 對稱部分 + 對稱部分。使用演算法統計出現次數並推理出盡可能充分利用每個字元的迴文字串製造方法。
給定一個二維的二元矩陣,計算正方形的最大面積。利用DP演算法及最大化正方形邊長的方法,遍歷矩陣,釐清DP初始狀態並推導出DP狀態轉移關係式。複雜度分析說明了時間複雜度和空間複雜度。關鍵知識點是找出最大的正方形邊長。
Append Characters to String to Make Subsequence 給定兩個字串s和字串t。 請計算最少的字元串接數量是多少,串接在s的尾端,使得t是s的子序列。 測試範例 Example 1: Input: s = "coaching", t =
通過 取捨與否的最佳策略 來獲得 最高的分數。文章中運用了類似House Robbery的DP模型來解決這個問題。通過演算法化簡的技巧,將這個問題化簡到 相鄰物不可同時選擇的DP模型。同時,強烈建議同時複習House Robbery,熟悉DP演算法框架和掌握演算法化簡的技巧。
了解如何使用in-place原位操作及O(1)常數空間的演算法來反轉給定的字串陣列。藉由雙指針演算法,每回合對調左右兩個指針對應到的字元,並且逐漸往中心靠攏,由外而內進行反轉。詳細的演算法與複雜度分析也在文章中呈現。
動態規劃Dynamic Programming其實是 一種泛用的演算法思考方式與演算法建構框架。 動態規劃並不拘束於只能解課本上特定的的範例題。 只要我們能找出DP狀態定義、DP遞迴結構、初始條件(終止條件),就能適用動態規劃來解題,以數學的形式表達,並且在紙筆上或者電腦上、計算機上計算
你可能也想看
Google News 追蹤
Thumbnail
隨著理財資訊的普及,越來越多台灣人不再將資產侷限於台股,而是將視野拓展到國際市場。特別是美國市場,其豐富的理財選擇,讓不少人開始思考將資金配置於海外市場的可能性。 然而,要參與美國市場並不只是盲目跟隨標的這麼簡單,而是需要策略和方式,尤其對新手而言,除了選股以外還會遇到語言、開戶流程、Ap
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Thumbnail
希望透過條列和簡介,可以更方便讀者選讀自己偏好的主題。
  嗯……這篇是類疊跟設問的場合。也是快變成國文課的場合。 ❈❈❈   ※類疊法:   接二連三地反覆使用相同的一個字詞、語句。可增加文章的節奏感,凸顯文章的重點。   讓句型更加生動,避免枯燥,任何詞性都可以被重疊。名詞重疊常表示數量龐大;動詞重疊表示動作的進行;形容詞或副詞的重疊表示委婉
1 文字之後補充 2 3 4 5
最近實踐將學術閱讀流水線化,效率顯著提升。 其中已經有兩個動作實踐了50次以上,達到標準化。 動作一:將文獻內容轉為資訊塊 良品一標準 原料:閱讀材料的文本形式 成果物:資訊塊 動作二:將資訊塊匯集成話題索引筆記 (Keyword Index) 良品二 原料:帶著
Thumbnail
有個簡單的方法,把儲存格的文字串連起來!一起來看看怎麼做,很好操作唷!
Thumbnail
隨著理財資訊的普及,越來越多台灣人不再將資產侷限於台股,而是將視野拓展到國際市場。特別是美國市場,其豐富的理財選擇,讓不少人開始思考將資金配置於海外市場的可能性。 然而,要參與美國市場並不只是盲目跟隨標的這麼簡單,而是需要策略和方式,尤其對新手而言,除了選股以外還會遇到語言、開戶流程、Ap
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Thumbnail
希望透過條列和簡介,可以更方便讀者選讀自己偏好的主題。
  嗯……這篇是類疊跟設問的場合。也是快變成國文課的場合。 ❈❈❈   ※類疊法:   接二連三地反覆使用相同的一個字詞、語句。可增加文章的節奏感,凸顯文章的重點。   讓句型更加生動,避免枯燥,任何詞性都可以被重疊。名詞重疊常表示數量龐大;動詞重疊表示動作的進行;形容詞或副詞的重疊表示委婉
1 文字之後補充 2 3 4 5
最近實踐將學術閱讀流水線化,效率顯著提升。 其中已經有兩個動作實踐了50次以上,達到標準化。 動作一:將文獻內容轉為資訊塊 良品一標準 原料:閱讀材料的文本形式 成果物:資訊塊 動作二:將資訊塊匯集成話題索引筆記 (Keyword Index) 良品二 原料:帶著
Thumbnail
有個簡單的方法,把儲存格的文字串連起來!一起來看看怎麼做,很好操作唷!