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 <= 100s由小写英文字母、空格和数字组成。
解题思路
这是一道直接模拟题,需要按照题目描述的规则计算得分。
解题思路:
字符分类统计:遍历字符串,统计元音字母和辅音字母的数量
- 元音字母:‘a’, ’e’, ‘i’, ‘o’, ‘u’
- 辅音字母:除元音字母外的其他英文字母
- 忽略:空格和数字
计算得分:根据题目规则计算最终得分
- 如果辅音字母数量大于0:得分 = floor(元音数量 / 辅音数量)
- 否则:得分 = 0
实现要点:
- 使用集合或字符串包含判断来识别元音字母
- 使用
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),只使用常数级别的额外空间存储计数器和元音字符集合 |