387. 字符串中的第一个唯一字符
https://leetcode.cn/problems/first-unique-character-in-a-string/
队列 哈希表 字符串 计数
方法一:哈希表
class Solution:
def firstUniqChar(self, s: str) -> int:
# 哈希表
# counter统计每个字符出现的次数
counter = {}
for le in s:
if le in counter:
counter[le] += 1
else:
counter[le] = 1
for idx, ch in enumerate(s):
if counter[ch] == 1:
return idx
return -1
方法二:哈希表优化
方法三:队列
383.赎金信
https://leetcode.cn/problems/ransom-note/
哈希表 字符串 计数
给你两个字符串:ransomNote 和 magazine ,判断 ransomNote 能不能由 magazine 里面的字符构成。
如果可以,返回 true ;否则返回 false 。
magazine 中的每个字符只能在 ransomNote 中使用一次。
我的思路:用一个哈希表counter记录ransomNote中的字符和字符个数,遍历magazine中的元素,如果元素在counter中,则counter中该字符的个数减1。如果counter中各字符的个数等于0或者小于0,说明 ransomNote 能由 magazine 里面的字符构成,否则不能。
class Solution:
def canConstruct(self, ransomNote: str, magazine: str) -> bool:
counter = {}
for le in ransomNote:
if le in counter:
counter[le] += 1
else:
counter[le] = 1
for ch in magazine:
if ch in counter:
counter[ch] -= 1
for c in counter:
if counter[c] > 0:
return False
return True
官方解法一:
只需要满足字符串 magazine 中的每个英文字母 (’a’-’z’) 的统计次数都大于等于 ransomNote 中相同字母的统计次数即可。
官方代码:
class Solution:
def canConstruct(self, ransomNote: str, magazine: str) -> bool:
if len(ransomNote) > len(magazine):
return False
return not collections.Counter(ransomNote) - collections.Counter(magazine)
和我的理解其实是一致的。
242. 有效的字母异位词
https://leetcode.cn/problems/valid-anagram/
哈希表 字符串 排序
我的思路:首先,如果这两个字符串长度不相等,一定不是有效的字母异位词。如果长度相等,则判断字符元素出现的次数是否相等。
class Solution:
def isAnagram(self, s: str, t: str) -> bool:
if len(s) != len(t): return False
counter = {}
for le in s:
if le in counter:
counter[le] += 1
else:
counter[le] = 1
for ch in t:
if ch in counter:
counter[ch] -= 1
for c in counter:
if counter[c] != 0:
return False
return True
另一种写法,更好理解
class Solution:
def isAnagram(self, s: str, t: str) -> bool:
record = [0] * 26
if len(s) != len(t):
return False
for i in range(len(s)):
record[ord(s[i]) - ord('a')] += 1
record[ord(t[i]) - ord('a')] -= 1
print(record)
for j in range(26):
if record[j] != 0:
return False
break
return True
本文解析了LeetCode上的几个经典字符串题目,包括寻找字符串中的第一个唯一字符、判断一个字符串是否能由另一个字符串的字符构成以及验证两个字符串是否为有效的字母异位词。介绍了使用哈希表和计数的方法来解决这些问题。

被折叠的 条评论
为什么被折叠?



