2026-05-23:元音辅音得分。用go语言,给定只包含小写英文字母、空格和数字的字符串 s。 - 统计元音字母的数量 v:元

举报
福大大架构师每日一题 发表于 2026/05/23 19:27:40 2026/05/23
【摘要】 2026-05-23:元音辅音得分。用go语言,给定只包含小写英文字母、空格和数字的字符串 s。统计元音字母的数量 v:元音字母为 a、e、i、o、u。统计辅音字母的数量 c:除上述元音外的所有英文字母都算作辅音;空格和数字不计入 v 或 c。计算规则:若 c > 0,则得分为 ⌊v / c⌋(把 v 除以 c 后向下取整)。若 c = 0,则得分为 0。输出 s 的得分。1 <= s.le...

2026-05-23:元音辅音得分。用go语言,给定只包含小写英文字母、空格和数字的字符串 s。

  • 统计元音字母的数量 v:元音字母为 a、e、i、o、u。

  • 统计辅音字母的数量 c:除上述元音外的所有英文字母都算作辅音;空格和数字不计入 v 或 c。

计算规则:

  • 若 c > 0,则得分为 ⌊v / c⌋(把 v 除以 c 后向下取整)。

  • 若 c = 0,则得分为 0。

输出 s 的得分。

1 <= s.length <= 100。

s 仅由小写英文字母、空格和数字组成。

输入: s = “cooear”。

输出: 2。

解释:

字符串 s = “cooear” 包含 v = 4 个元音字母 (‘o’, ‘o’, ‘e’, ‘a’) 和 c = 2 个辅音字母 (‘c’, ‘r’)。

得分为 floor(v / c) = floor(4 / 2) = 2。

题目来自力扣3813。

代码执行过程分步详细描述

第一步:函数定义与初始化变量

程序首先定义了核心计算函数 vowelConsonantScore,接收字符串参数 s,并在函数内部初始化两个整型变量:

  • v:用于统计元音字母的数量,初始值为 0;
  • c:用于统计辅音字母的数量,初始值为 0。

第二步:遍历字符串的每一个字符

函数通过循环,逐个取出字符串 s 中的每一个字符,对每个字符依次做判断和处理。

第三步:过滤非字母字符

对当前遍历到的字符,先判断是否为英文字母

  • 如果字符是空格、数字(非字母),直接跳过当前字符,不进行任何统计,继续遍历下一个字符;
  • 如果字符是英文字母,则进入下一步的元音/辅音判断。

第四步:区分元音字母和辅音字母

针对筛选出的英文字母,进一步判断是否为元音字母(a、e、i、o、u):

  • 如果字符是元音字母,将元音计数器 v 的值加 1;
  • 如果字符不是元音字母(即辅音字母),将辅音计数器 c 的值加 1。

第五步:遍历结束,统计完成

当字符串中所有字符都遍历完成后,vc 就分别存储了当前字符串中元音字母的总数量辅音字母的总数量
以输入 s = "cooear" 为例:

  • 遍历后统计:元音 v = 4(o、o、e、a),辅音 c = 2(c、r)。

第六步:按照规则计算最终得分

根据题目规则判断并计算得分:

  1. 首先检查辅音数量 c 是否大于 0;
  2. 如果 c > 0:计算 v 除以 c 的结果,并向下取整(整数除法自动向下取整),将该值作为函数返回值;
  3. 如果 c = 0:直接返回 0 作为得分。
    示例中 c=2>0,计算 4/2=2,返回结果 2。

第七步:主函数调用与输出结果

程序的主函数 main 中:

  1. 定义输入字符串 s = "cooear"
  2. 调用核心函数 vowelConsonantScore 传入字符串,获取计算结果;
  3. 通过打印语句输出最终结果 2。

时间复杂度与额外空间复杂度分析

1. 总时间复杂度

时间复杂度取决于字符串的遍历操作

  • 程序只对输入字符串进行了一次从头到尾的遍历,遍历次数等于字符串的长度 n
  • 遍历过程中的每一步操作(判断是否为字母、判断是否为元音)都是常数时间 O(1) 的操作;
  • 没有嵌套循环、递归等耗时操作。

因此,总时间复杂度为 O(n)(n 为输入字符串的长度)。

2. 总额外空间复杂度

额外空间复杂度指除了输入数据本身外,程序运行时额外开辟的内存空间

  • 程序仅定义了几个固定的变量(vc、循环字符变量),这些变量的内存占用是固定常数,不随输入字符串长度变化;
  • 没有使用切片、map、数组等会随输入规模增长的动态数据结构;
  • 仅用到了固定字符串 "aeiou",属于常量空间。

因此,总额外空间复杂度为 O(1)(常数级空间)。

总结

  1. 执行过程:初始化计数→遍历字符→过滤非字母→统计元音/辅音→按规则计算得分→输出结果;
  2. 时间复杂度:O(n)(n 为字符串长度);
  3. 额外空间复杂度:O(1)(常数空间)。

Go完整代码如下:

package main

import (
	"fmt"
	"strings"
	"unicode"
)

func vowelConsonantScore(s string) int {
	v, c := 0, 0
	for _, ch := range s {
		if !unicode.IsLetter(ch) {
			continue
		}
		if strings.ContainsRune("aeiou", ch) {
			v++
		} else {
			c++
		}
	}

	if c > 0 {
		return v / c
	}
	return 0
}

func main() {
	s := "cooear"
	result := vowelConsonantScore(s)
	fmt.Println(result)
}

在这里插入图片描述

Python完整代码如下:

# -*-coding:utf-8-*-

import string

def vowel_consonant_score(s: str) -> int:
    v = 0
    c = 0
    
    vowels = set('aeiou')
    
    for ch in s:
        if not ch.isalpha():
            continue
        if ch in vowels:
            v += 1
        else:
            c += 1
    
    if c > 0:
        return v // c  # 使用整数除法,与 Go 的 int 除法行为一致
    return 0

def main():
    s = "cooear"
    result = vowel_consonant_score(s)
    print(result)

if __name__ == "__main__":
    main()

在这里插入图片描述

C++完整代码如下:

#include <iostream>
#include <string>
#include <cctype>

int vowelConsonantScore(const std::string& s) {
    int v = 0, c = 0;

    for (char ch : s) {
        if (!std::isalpha(static_cast<unsigned char>(ch))) {
            continue;
        }

        char lowerCh = std::tolower(static_cast<unsigned char>(ch));
        if (lowerCh == 'a' || lowerCh == 'e' || lowerCh == 'i' ||
            lowerCh == 'o' || lowerCh == 'u') {
            v++;
        } else {
            c++;
        }
    }

    if (c > 0) {
        return v / c;
    }
    return 0;
}

int main() {
    std::string s = "cooear";
    int result = vowelConsonantScore(s);
    std::cout << result << std::endl;
    return 0;
}

在这里插入图片描述

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。