給定僅有小寫字母組成的字串陣列 a,返回列表中的每個字串中都顯示的全部字元(包括重複字元)組成的列表。例如,如果乙個字元在每個字串**現 3 次,但不是 4 次,則需要在最終答案中包含該字元 3 次。
你可以按任意順序返回答案。
示例 1:
輸入:[「bella」,「label」,「roller」]
輸出:[「e」,「l」,「l」]
示例 2:
輸入:[「cool」,「lock」,「cook」]
輸出:[「c」,「o」]
ord() 函式是 chr() 函式(對於8位的ascii字串)或 unichr() 函式(對於unicode物件)的配對函式,它以乙個字元(長度為1的字串)作為引數,返回對應的 ascii 數值,或者 unicode 數值,如果所給的 unicode 字元超出了你的 python 定義範圍,則會引發乙個 typeerror 的異常。
!!!必須圓括號!!!!!!!!!!!!!!!
>>
>
ord(
'a')
97>>
>
ord(
'b')
98>>
>
ord(
'c')
99
理清題意後,我們發現可以先統計字串陣列中每個字元出現的次數,然後比較得出字元在每個字串**現次數最小的部分,然後將其輸出。具體的做法如下:
以字串陣列第乙個字串為準,先記錄第乙個字串中每個字元出現的次數(這裡可用列表統計),定義為 min_freq;
遍歷後續的字串,統計字元出現次數的同時,與前面的進行比較,將字元出現次數較小的更新到 min_freq 中;
迴圈遍歷至結束,遍歷 min_freq,輸出對應次數個字元。
這裡,用列表統計字元次數,題目中說明只有小寫字母,那麼可以將定義長度為 26 的列表,字母按順序對應列表的索引。
python中for _ in range () 中』'的意思:其中』』 是乙個迴圈標誌,也可以用i,j 等其他字母代替,下面的迴圈中不會用到,起到的是迴圈此數的作用就像c語言中
class
solution
:def
commonchars
(self, a: list[
str])-
> list[
str]
:#構建空列表
min_freq=[0
]*26#print(min_freq)
#統計第乙個字串的pinlv
for i in a[0]
: min_freq[
ord(i)
-ord
('a')]
+=1#統計後續字串的出現次數
#print(len(a))
for n2 in
range(1
,len
(a))
: other_freq=[0
]*26for ch in a[n2]
: other_freq[
ord(ch)
-ord
('a')]
+=1#min_freq 中字元出現次數比對
for k in
range(26
):min_freq[k]
=min
(min_freq[k]
,other_freq[k]
)#輸出對應的字元
ans=
for i in
range
(len
(min_freq)):
for _ in
range
(min_freq[i]):
chr(i+
ord(
'a')))
return ans
Leetcode刷題筆記 1002 查詢常用字元
題目 給定僅有小寫字母組成的字串陣列 a,返回列表中的每個字串中都顯示的全部字元 包括重複字元 組成的列表。例如,如果乙個字元在每個字串 現 3 次,但不是 4 次,則需要在最終答案中包含該字元 3 次。你可以按任意順序返回答案。示例1 輸入 bella label roller 輸出 e l l ...
pat刷題之旅1002
一開始那道題,我的思路就是用乙個變數n來儲存所輸入的數,之後通過模10,除10運算來求得每一位上的數之和,最後將所求得的和進行模10,除10將每一位上的數放到陣列arr中,通過switch case語句對應到相應的漢字表示中。如下。include includeint main int s 0,i ...
pat 刷題記錄 pat 乙級 刷題 1002
讀入乙個正整數 n,計算其各位數字之和,用漢語拼音寫出和的每一位數字。每個測試輸入包含 1 個測試用例,即給出自然數 n 的值。這裡保證 n 小於 10 100 在一行內輸出 n 的各位數字之和的每一位,拼音數字間有 1 空格,但一行中最後乙個拼音數字後沒有空格。123456789098765432...