这里的三题都和字符出现次数有关,可以用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)










