跳转至

3813. 元音辅音得分

题目描述

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

v 表示 s 中元音字母的数量,c 表示辅音字母的数量。

元音字母是 'a''e''i''o''u',而英文字母表中除元音外的其他字母均视为辅音字母。

字符串 s 得分 定义如下:

  • 如果 c > 0,则 score = floor(v / c),其中 floor 表示 向下取整 到最接近的整数。
  • 否则,如果 c = 0,则 score = 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 仅由小写英文字母、空格和数字组成。

解法

方法一:计数

我们遍历字符串,统计元音字母和辅音字母的数量,分别记为 \(v\)\(c\)。最后根据题意计算得分即可。

时间复杂度 \(O(n)\),其中 \(n\) 为字符串的长度。空间复杂度 \(O(1)\)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
class Solution:
    def vowelConsonantScore(self, s: str) -> int:
        v = c = 0
        for ch in s:
            if ch.isalpha():
                c += 1
                if ch in "aeiou":
                    v += 1
        c -= v
        return 0 if c == 0 else v // c
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
class Solution {
    public int vowelConsonantScore(String s) {
        int v = 0, c = 0;
        for (int i = 0; i < s.length(); i++) {
            char ch = s.charAt(i);
            if (Character.isLetter(ch)) {
                c++;
                if ("aeiou".indexOf(ch) != -1) {
                    v++;
                }
            }
        }
        c -= v;
        return c == 0 ? 0 : v / c;
    }
}
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
class Solution {
public:
    int vowelConsonantScore(string s) {
        int v = 0, c = 0;
        for (char ch : s) {
            if (isalpha(ch)) {
                c++;
                if (string("aeiou").find(ch) != string::npos) {
                    v++;
                }
            }
        }
        c -= v;
        return c == 0 ? 0 : v / c;
    }
};
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
func vowelConsonantScore(s string) int {
    v, c := 0, 0
    for _, ch := range s {
        if unicode.IsLetter(ch) {
            c++
            if strings.ContainsRune("aeiou", ch) {
                v++
            }
        }
    }
    c -= v
    if c == 0 {
        return 0
    }
    return v / c
}
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
function vowelConsonantScore(s: string): number {
    let [v, c] = [0, 0];
    for (const ch of s) {
        if (/[a-zA-Z]/.test(ch)) {
            c++;
            if ('aeiou'.includes(ch)) {
                v++;
            }
        }
    }
    c -= v;
    return c === 0 ? 0 : Math.floor(v / c);
}

评论