Easy

题目描述

给定一个由小写英文字母、空格和数字组成的字符串 s

v 为字符串 s 中元音字母的数量,c 为辅音字母的数量。

元音字母包括 ‘a’、’e’、‘i’、‘o’、‘u’,英文字母表中的其他字母都被认为是辅音字母。

字符串 s 的得分定义如下:

  • 如果 c > 0,得分 = floor(v / c),其中 floor 表示向下取整到最近的整数。
  • 否则,得分 = 0。

返回表示字符串得分的整数。

示例 1:

输入:s = "cooear"
输出:2
解释:
字符串 s = "cooear" 包含 v = 4 个元音字母('o'、'o'、'e'、'a')和 c = 2 个辅音字母('c'、'r')。
得分为 floor(v / c) = floor(4 / 2) = 2。

示例 2:

输入:s = "axeyizou"
输出:1
解释:
字符串 s = "axeyizou" 包含 v = 5 个元音字母('a'、'e'、'i'、'o'、'u')和 c = 3 个辅音字母('x'、'y'、'z')。
得分为 floor(v / c) = floor(5 / 3) = 1。

示例 3:

输入:s = "au 123"
输出:0
解释:
字符串 s = "au 123" 不包含辅音字母(c = 0),所以得分为 0。

约束条件:

  • 1 <= s.length <= 100
  • s 由小写英文字母、空格和数字组成。

解题思路

这是一道直接模拟题,需要按照题目描述的规则计算得分。

解题思路:

  1. 字符分类统计:遍历字符串,统计元音字母和辅音字母的数量

    • 元音字母:‘a’, ’e’, ‘i’, ‘o’, ‘u’
    • 辅音字母:除元音字母外的其他英文字母
    • 忽略:空格和数字
  2. 计算得分:根据题目规则计算最终得分

    • 如果辅音字母数量大于0:得分 = floor(元音数量 / 辅音数量)
    • 否则:得分 = 0
  3. 实现要点

    • 使用集合或字符串包含判断来识别元音字母
    • 使用 isalpha() 或字符范围判断来识别英文字母
    • 整数除法天然向下取整,无需额外处理

这种直接模拟的方法时间复杂度为 O(n),空间复杂度为 O(1),是最优解法。

代码实现

class Solution {
public:
    int vowelConsonantScore(string s) {
        int vowels = 0, consonants = 0;
        string vowelSet = "aeiou";
        
        for (char c : s) {
            if (c >= 'a' && c <= 'z') {
                if (vowelSet.find(c) != string::npos) {
                    vowels++;
                } else {
                    consonants++;
                }
            }
        }
        
        return consonants > 0 ? vowels / consonants : 0;
    }
};
class Solution:
    def vowelConsonantScore(self, s: str) -> int:
        vowels = 0
        consonants = 0
        vowel_set = set('aeiou')
        
        for c in s:
            if c.isalpha():
                if c in vowel_set:
                    vowels += 1
                else:
                    consonants += 1
        
        return vowels // consonants if consonants > 0 else 0
public class Solution {
    public int VowelConsonantScore(string s) {
        int vowels = 0, consonants = 0;
        HashSet<char> vowelSet = new HashSet<char> {'a', 'e', 'i', 'o', 'u'};
        
        foreach (char c in s) {
            if (char.IsLetter(c)) {
                if (vowelSet.Contains(c)) {
                    vowels++;
                } else {
                    consonants++;
                }
            }
        }
        
        return consonants > 0 ? vowels / consonants : 0;
    }
}
var vowelConsonantScore = function(s) {
    let vowels = 0, consonants = 0;
    const vowelSet = new Set(['a', 'e', 'i', 'o', 'u']);
    
    for (let c of s) {
        if (c >= 'a' && c <= 'z') {
            if (vowelSet.has(c)) {
                vowels++;
            } else {
                consonants++;
            }
        }
    }
    
    return consonants > 0 ? Math.floor(vowels / consonants) : 0;
};

复杂度分析

复杂度分析
时间复杂度O(n),其中 n 是字符串长度,需要遍历字符串一次
空间复杂度O(1),只使用常数级别的额外空间存储计数器和元音字符集合