题目:
给你一份『词汇表』(字符串数组)?words?和一张『字母表』(字符串)?chars。
假如你可以用?chars?中的『字母』(字符)拼写出 words?中的某个『单词』(字符串),那么我们就认为你掌握了这个单词。
注意:每次拼写(指拼写词汇表中的一个单词)时,chars 中的每个字母都只能用一次。
返回词汇表?words?中你掌握的所有单词的 长度之和。
?
思路:
这道题一看就是用的哈希表
我的题解:
class Solution(object):
def countCharacters(self, words, chars):
ans=0
s=[0]*26
tmp=[0]*26
# 散列
for i in chars:
s[ord(i)-ord('a')]=s[ord(i)-ord('a')]+1
for i in words:
# 将s存储到tmp中 这样s中的值不会改变
for k in range(len(s)):
tmp[k]=s[k]
# flag标记这个单词会不会 不会的话 flag=0
flag=1
for j in i:
if tmp[ord(j)-ord('a')]==0:
flag=0
break
tmp[ord(j) - ord('a')] = tmp[ord(j) - ord('a')] - 1
if(flag):
ans=ans+len(i)
return ans
优雅题解:
# Python 3
class Solution:
def countCharacters(self, words: List[str], chars: str) -> int:
chars_cnt = collections.Counter(chars)
ans = 0
for word in words:
word_cnt = collections.Counter(word)
for c in word_cnt:
if chars_cnt[c] < word_cnt[c]:
break
else:
ans += len(word)
return ans
好方便啊~
|