1. 题目解析与需求拆解
"统计大写辅音字母"这个题目看似简单,但实际包含了几个需要特别注意的技术要点。我们先明确题目要求:给定一个字符串,统计其中大写辅音字母出现的次数(注意不统计元音字母)。
这里有几个关键概念需要厘清:
- 大写字母:ASCII码范围65('A')~90('Z')
- 辅音字母:英文字母中除A/E/I/O/U之外的21个字母
- 统计方式:需要区分大小写,只计算大写形式
实际编程中常见误区:直接将字母与元音比较而忽略大小写,导致统计结果包含小写字母或漏计部分大写字母。
2. 核心算法设计思路
2.1 基础实现方案
最直接的实现方式是遍历字符串,对每个字符检查:
- 是否在大写字母范围内
- 是否不是元音字母(A/E/I/O/U)
用伪代码表示:
code复制count = 0
for char in string:
if char is uppercase and char not in ['A','E','I','O','U']:
count += 1
2.2 优化方案对比
方案一:硬编码元音比较
python复制vowels = ['A', 'E', 'I', 'O', 'U']
count = sum(1 for c in s if c.isupper() and c not in vowels)
方案二:使用集合查找
python复制vowels = {'A', 'E', 'I', 'O', 'U'}
count = sum(1 for c in s if c.isupper() and c not in vowels)
方案三:ASCII码范围判断
python复制count = 0
for c in s:
if 65 <= ord(c) <= 90: # A-Z
if c not in {'A','E','I','O','U'}:
count += 1
性能对比:
- 小字符串(长度<100):差异可以忽略
- 大字符串(长度>1M):集合查找(O(1))优于列表查找(O(n))
3. 边界条件与异常处理
3.1 特殊字符处理
实际输入可能包
