更多精彩內(nèi)容,請(qǐng)關(guān)注【力扣簡(jiǎn)單題】。
題目
難度:★★☆☆☆
類型:字符串
給定僅有小寫(xiě)字母組成的字符串?dāng)?shù)組 A,返回列表中的每個(gè)字符串中都顯示的全部字符(包括重復(fù)字符)組成的列表。例如,如果一個(gè)字符在每個(gè)字符串中出現(xiàn) 3 次,但不是 4 次,則需要在最終答案中包含該字符 3 次。
你可以按任意順序返回答案。
提示
1 <= A.length <= 100
1 <= A[i].length <= 100
A[i][j] 是小寫(xiě)字母
示例
示例 1
輸入:["bella","label","roller"]
輸出:["e","l","l"]
示例 2
輸入:["cool","lock","cook"]
輸出:["c","o"]
解答
方案1:統(tǒng)計(jì)每個(gè)單詞
我們?yōu)槊總€(gè)單詞準(zhǔn)備一個(gè)長(zhǎng)度為26的列表,列表中第i個(gè)元素代表字母表中第i個(gè)字母在這個(gè)單詞中出現(xiàn)的次數(shù),然后我們?nèi)?6個(gè)字母在每個(gè)單詞出現(xiàn)的最小次數(shù),得到結(jié)果。
class Solution:
def commonChars(self, A):
"""
:param A: List[str]
:return: List[str]
"""
def counter(word):
res = [0] * 26
for a in word:
res[ord(a)-97] += 1
return res
count = [counter(w) for w in A]
min_count = [min([w[i] for w in count]) for i in range(26)]
res = []
for i in range(26):
while min_count[i] > 0:
res.append(chr(i+97))
min_count[i] -= 1
return res
方案2:只統(tǒng)計(jì)第一個(gè)單詞
取出第一個(gè)單詞中的所有字母組成集合,然后考察該集合中的字母在每個(gè)單詞中出現(xiàn)過(guò)的最小次數(shù)。
class Solution(object):
def commonChars(self, A):
"""
:type A: List[str]
:rtype: List[str]
"""
res = []
if not A:
return res
key = set(A[0])
for k in key:
minnum = min(a.count(k) for a in A)
res += minnum*k
return res
如有疑問(wèn)或建議,歡迎評(píng)論區(qū)留言~