拼写单词
力扣官方题解发布于 1 天前11.7k官方C++Python3哈希表字符串
方法一:哈希表记数
思路和算法
显然,对于一个单词 word
,只要其中的每个字母的数量都不大于 chars
中对应的字母的数量,那么就可以用 chars
中的字母拼写出 word
。所以我们只需要用一个哈希表存储 chars
中每个字母的数量,再用一个哈希表存储 word
中每个字母的数量,最后将这两个哈希表的键值对逐一进行比较即可。
- C++
- Python3
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
复杂度分析
-
时间复杂度:O(n)O(n),其中 nn 为所有字符串的长度和。我们需要遍历每个字符串,包括
chars
以及数组words
中的每个单词。 -
空间复杂度:O(S)O(S),其中 SS 为字符集大小,在本题中 SS 的值为 2626(所有字符串仅包含小写字母)。程序运行过程中,最多同时存在两个哈希表,使用的空间均不超过字符集大小 SS,因此空间复杂度为 O(S)O(S)。
下一篇:统计 Python3
(编辑过)12 小时前
Python3代码中的if-else还能和for循环这么玩,难道就我一个头一回知道么~
10 小时前
@Yuhan Huang effctive python 有介绍这种写法,但不提倡,会导致阅读时不够清晰。
赞踩回复
9 小时前
@gelthin 学习了,正好提醒了我买了这本书还没怎么看= =
赞踩回复
9 小时前
@changfei041 python 本来就有的语法为什么不能用。。。
赞踩回复
7 小时前
兄弟们把理解打在公屏上
赞踩回复
7 小时前
@Yuhan Huang 我也第一次知道……
赞踩回复
4 小时前
@Yuhan Huang 沃特玛也才知道还有这种骚操作
赞踩回复
3 小时前
@Yuhan Huang 其实不光for循环可以这样,try ... except .. finally 也可以这样,模式如下:
try:
# statement
except Exception as e:
# statement2
else:
# 如果没有Exception,就执行这里
finally:
# finally statement