E3120.统计特殊字母的数量 I
hash table, https://leetcode.cn/problems/count-the-number-of-special-characters-i/
给你一个字符串 word。如果 word 中同时存在某个字母的小写形式和大写形式,则称这个字母为 特殊字母 。
返回 word 中 特殊字母 的数量。
示例 1:
输入:word = "aaAbcBC"
输出:3
解释:
word 中的特殊字母是 'a'、'b' 和 'c'。
示例 2:
输入:word = "abc"
输出:0
解释:
word 中不存在大小写形式同时出现的字母。
示例 3:
输入:word = "abBCab"
输出:1
解释:
word 中唯一的特殊字母是 'b'。
提示:
1 <= word.length <= 50word仅由小写和大写英文字母组成。
这个问题可以通过集合(Set)来高效解决。
解题思路
我们可以将问题拆解为:找出所有在字符串中出现过的小写字母,以及所有在字符串中出现过的大写字母(并将其转换为小写),然后求两者的交集。交集的大小即为“特殊字母”的数量。
具体步骤如下:
- 找出
word中所有的小写字母,存入集合lowers。 - 找出
word中所有的大写字母,转换为小写后存入集合uppers。 - 计算
lowers和uppers的交集大小。
Python 代码实现
python
class Solution:
def numberOfSpecialChars(self, word: str) -> int:
# 收集所有出现过的小写字母
lowers = {c for c in word if c.islower()}
# 收集所有出现过的大写字母,并转换为小写
uppers = {c.lower() for c in word if c.isupper()}
# 返回交集的长度
return len(lowers & uppers)复杂度分析
- 时间复杂度:
,其中 是字符串 word的长度。我们需要遍历一次字符串来构建两个集合,集合求交集的操作时间复杂度取决于字符集的大小(最多为 26 个字母),因此也是常数级别的。 - 空间复杂度:
或 ,其中 是字符集的大小(这里最多为 26 个英文字母)。因为存储的字符数量不会超过英文字母的数量,所以占用常数级别的额外空间。