如何逐字符分析字符串判断是否含2个小写元音及连续小写字母
字符串校验实现方案
需求明确
- 校验规则1:字符串包含至少2个非大写元音字母,元音特指a、e、i、o、u
- 校验规则2:字符串存在至少2个字母表顺序连续的非大写字母,即相邻小写字母的ASCII码差值为1
- 两个规则同时满足才判定为有效字符串,参考示例:
aabcd为有效字符串,cdefgh为无效字符串
逐字符校验实现思路
仅需一次遍历即可完成两项校验,无需多次扫描字符串,具体步骤如下:
- 预定义小写元音集合:
vowels = {'a', 'e', 'i', 'o', 'u'} - 初始化统计变量:
vowel_count统计小写元音出现次数,has_consecutive标记是否找到连续小写字母 - 按索引逐个遍历字符串字符:
- 若当前字符属于元音集合,
vowel_count自增1 - 若不是首个字符,判断当前字符与前一个字符是否均为小写,且ASCII码差值为1,是则将
has_consecutive设为True
- 若当前字符属于元音集合,
- 遍历结束后,只要满足
vowel_count >=2且has_consecutive为真,就返回有效,否则返回无效
Python实现示例
def check_valid_string(s): vowels = {'a', 'e', 'i', 'o', 'u'} vowel_count = 0 has_consecutive = False for i in range(len(s)): current = s[i] # 统计小写元音数量 if current in vowels: vowel_count += 1 # 判断相邻连续小写字母 if i > 0: prev = s[i-1] if prev.islower() and current.islower() and ord(current) - ord(prev) == 1: has_consecutive = True return vowel_count >= 2 and has_consecutive
测试用例验证
- 入参
aabcd:元音计数为2,存在a和b连续,返回True,符合示例要求 - 入参
cdefgh:元音计数仅为1(仅含e),返回False,符合示例要求 - 入参
aeiou:元音计数为5,但无连续小写字母,返回False - 入参
aabbcc:元音计数为2,存在多组连续小写字母,返回True
内容的提问来源于stack exchange,提问作者repulsive2020
相关产品推荐
相关产品推荐

