统计以Vowels(元音)或Consonants(辅音)开头的子串数量问题求解
问题解决思路
现有代码存在的问题
word.lower()没有赋值给变量,转换后的小写字符串没有被后续逻辑使用- 仅实现了所有子串的打印,没有添加元音/辅音开头的计数逻辑
- 三重循环的实现方式冗余,统计计数不需要枚举打印所有子串
可行实现逻辑
一个字符串中,从位置i(下标从0开始)开头的子串总数等于字符串总长度 - i,比如长度为5的字符串,下标0开头的子串有5个,下标1开头的有4个,以此类推。只需要判断每个开头位置的字符是元音还是辅音,直接累加对应数量即可,时间复杂度仅为O(n)。
修正后的代码
高效计数版(不需要打印子串)
# 输入直接转小写并赋值 word = input().lower() vowels = "aeiou" count_v = 0 count_c = 0 str_len = len(word) for i in range(str_len): if word[i] in vowels: count_v += str_len - i else: count_c += str_len - i print(f"元音开头的子串数量:{count_v} - 辅音开头的子串数量:{count_c}")
保留原打印子串功能版
word = input().lower() vowels = "aeiou" count_v = 0 count_c = 0 str_len = len(word) for i in range(str_len): # 先统计当前开头对应的子串数量 if word[i] in vowels: count_v += str_len - i else: count_c += str_len - i # 打印所有以i开头的子串 for j in range(i, str_len): print(word[i:j+1]) print(f"元音开头的子串数量:{count_v} - 辅音开头的子串数量:{count_c}")
内容的提问来源于stack exchange,提问作者symb1anzxc
相关产品推荐
相关产品推荐

