这里的三题都和字符出现次数有关,可以用dict
或 Counter
来轻松解决。
和ditc
相关的可以参照文档docs collections,里面比较常用的是defaultdict
和Counter
。
387. 字符串中的第一个唯一字符
返回字符串中第一个出现次数为一的下标。
用ditc
统计出现次数后遍历:
class Solution:
def firstUniqChar(self, s: str) -> int:
word_count = defaultdict(int)
for x in s:
word_count[x] += 1
for idx,x in enumerate(s):
if word_count[x] == 1:
return idx
return -1
383. 赎金信
输入两个字符串s1
,s2
。
判断s1
能不能通过s2
中的字符拼凑出来。
使用Counter
统计字符出现次数,只要s2
中的字符出现次数比s1
的次数多就可以。
class Solution:
def canConstruct(self, ransomNote: str, magazine: str) -> bool:
cnt1 = Counter(ransomNote)
cnt2 = Counter(magazine)
for k,v in cnt1.items():
if k in cnt2 and cnt2[k] >= v:
continue
else:
return False
return True
242. 有效的字母异位词
给定两个字符串s
和 t
,编写一个函数来判断 t
是否是 s
的字母异位词。
注意:若 s
和 t
中每个字符出现的次数都相同,则称 s
和 t
互为字母异位词。
class Solution:
def isAnagram(self, s: str, t: str) -> bool:
return Counter(s)== Counter(t)