給你乙份『詞彙表』(字串陣列)words
和一張『字母表』(字串)chars
。
假如你可以用chars
中的『字母』(字元)拼寫出words
中的某個『單詞』(字串),那麼我們就認為你掌握了這個單詞。
注意:每次拼寫時,chars
中的每個字母都只能用一次。
返回詞彙表words
中你掌握的所有單詞的長度之和。
示例 1:
輸入:words = ["cat","bt","hat","tree"], chars = "atach"輸出:6解釋:可以形成字串 "cat" 和 "hat",所以答案是 3 + 3 = 6。示例 2:
輸入:words = ["hello","world","leetcode"], chars = "welldonehoneyr"輸出:10解釋:可以形成字串 "hello" 和 "world",所以答案是 5 + 5 = 10。
1 <= words.length <= 1000
1 <= words[i].length, chars.length <= 100
所有字串中都僅包含小寫英文本母
取words當中的乙個詞"cat"來說明,chars = "atach"
1.掃瞄"cat",如果"cat"中的字元出現在chars中,則在chars中把這個字元置為星號(*)
2.掃瞄"cat"結束之後看看是否"cat"用到了。
classsolution(object):
defcountcharacters(self, words, chars):
""":type words: list[str]
:type chars: str
:rtype: int
"""ans =0
for word in
words:
chars_ =chars
test =len(word)
for w in
word:
idx =chars_.find(w)
if idx == -1:
test-=1
break
chars_ = chars_[:idx] + "
*"+chars_[idx+1:]
if test ==len(word):
ans+=len(word)
return ans
用 word = "cat" ,chars = "atach" 來說明
1.換個方向思考,假設我們把 word 和 chars 排個序:
word = "act"
chars = "aacht"
2.縱向對比一下發現,必須有:chars.count("a") >= word.count(a) , 否則不能拼寫這個單詞。
classsolution(object):
defcountcharacters(self, words, chars):
""":type words: list[str]
:type chars: str
:rtype: int
"""ans =0
for w in
words:
for i in
w:
if w.count(i) >chars.count(i):
break
else
: ans+=len(w)
return ans
--摘自大佬的答案
python簡潔寫法:
classsolution:
def countcharacters(self, words: list[str], chars: str) ->int:
ans =0
cnt =collections.counter(chars)
for w in
words:
c =collections.counter(w)
if all([c[i] <= cnt[i] for i in
c]):
ans +=len(w)
return
ans
力扣題目學習 拼寫單詞
給你乙份 詞彙表 字串陣列 words 和一張 字母表 字串 chars。假如你可以用 chars 中的 字母 字元 拼寫出 words 中的某個 單詞 字串 那麼我們就認為你掌握了這個單詞。注意 每次拼寫時,chars 中的每個字母都只能用一次。返回詞彙表 words 中你掌握的所有單詞的 長度之...
力扣活動0315 695 島嶼的最大面積
給定乙個包含了一些 0 和 1的非空二維陣列grid,乙個島嶼是由四個方向 水平或垂直 的1 代表土地 構成的組合。你可以假設二維矩陣的四個邊緣都被水包圍著。找到給定的二維陣列中最大的島嶼面積。如果沒有島嶼,則返回面積為0。示例 1 0,0,1,0,0,0,0,1,0,0,0,0,0 0,0,0,0...
力扣 369 給單鏈表加一
用乙個 非空 單鏈表來表示乙個非負整數,然後將這個整數加一。你可以假設這個整數除了 0 本身,沒有任何前導的 0。這個整數的各個數字按照 高位在鍊錶頭部 低位在鍊錶尾部 的順序排列。示例 輸入 1,2,3 輸出 1,2,4 反轉再反轉 definition for singly linked lis...