Python中如何按子串首字符(元音/辅音)统计重复子串数量?
解决Python中统计元音/辅音开头子串数量的问题
问题分析
需要统计字符串中所有以元音开头的子串总数和所有以辅音开头的子串总数,规则是每个首字符对应的所有可能子串都要计数(比如Banana中,每个a开头的子串,包括a、an、ana等,都要单独算入统计)。
原代码的问题
你的代码存在两个关键错误:
- 计数器逻辑颠倒:把元音开头的计数加到了
count_c(辅音计数器),辅音开头的加到了count_v(元音计数器)。 - 子串数量计算错误:每个位置仅加1,但实际上从索引
i开始的子串数量是len(string) - i(比如索引i处的字符,可以生成从长度1到len(string)-i的所有子串,总数为len(string)-i个)。
修正后的代码
def minion_game(string): # 统一转为小写,避免大小写判断遗漏 s = string.lower() count_v = 0 # 元音开头的子串总数 count_c = 0 # 辅音开头的子串总数 vowels = {'a', 'e', 'i', 'o', 'u'} length = len(s) for i in range(length): if s[i] in vowels: # 元音开头,子串数量为总长度减去当前索引 count_v += length - i else: # 辅音开头,同理计算子串数量 count_c += length - i return count_v, count_c # 调用示例 string = input("请输入字符串:") vowel_count, consonant_count = minion_game(string) print(f"元音开头子串数量:{vowel_count}") print(f"辅音开头子串数量:{consonant_count}")
验证示例
以字符串Banana为例:
- 字符串转为小写后是
banana,长度为6 - 索引0(字符
b,辅音):贡献6个子串 →count_c +=6 - 索引1(字符
a,元音):贡献5个子串 →count_v +=5 - 索引2(字符
n,辅音):贡献4个子串 →count_c +=4 - 索引3(字符
a,元音):贡献3个子串 →count_v +=3 - 索引4(字符
n,辅音):贡献2个子串 →count_c +=2 - 索引5(字符
a,元音):贡献1个子串 →count_v +=1
最终统计结果:
- 元音开头子串总数:5+3+1=9
- 辅音开头子串总数:6+4+2=12
内容的提问来源于stack exchange,提问作者Chun Cheung
相关产品推荐
相关产品推荐

