Skip to content

Latest commit

 

History

History

2063.Vowels of All Substrings

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 
 
 
 
 
 
 

English Version

题目描述

给你一个字符串 word ,返回 word 的所有子字符串中 元音的总数 ,元音是指 'a''e''i''o' 'u'

子字符串 是字符串中一个连续(非空)的字符序列。

注意:由于对 word 长度的限制比较宽松,答案可能超过有符号 32 位整数的范围。计算时需当心。

 

示例 1:

输入:word = "aba"
输出:6
解释:
所有子字符串是:"a"、"ab"、"aba"、"b"、"ba" 和 "a" 。
- "b" 中有 0 个元音
- "a"、"ab"、"ba" 和 "a" 每个都有 1 个元音
- "aba" 中有 2 个元音
因此,元音总数 = 0 + 1 + 1 + 1 + 1 + 2 = 6 。

示例 2:

输入:word = "abc"
输出:3
解释:
所有子字符串是:"a"、"ab"、"abc"、"b"、"bc" 和 "c" 。
- "a"、"ab" 和 "abc" 每个都有 1 个元音
- "b"、"bc" 和 "c" 每个都有 0 个元音
因此,元音总数 = 1 + 1 + 1 + 0 + 0 + 0 = 3 。

示例 3:

输入:word = "ltcd"
输出:0
解释:"ltcd" 的子字符串均不含元音。

示例 4:

输入:word = "noosabasboosa"
输出:237
解释:所有子字符串中共有 237 个元音。

 

提示:

  • 1 <= word.length <= 105
  • word 由小写英文字母组成

解法

判断 word[i] 是否为元音,且在所有子字符串中一共出现了 (i+1)*(n-i) 次。

Python3

class Solution:
    def countVowels(self, word: str) -> int:
        ans, n = 0, len(word)
        for i, c in enumerate(word):
            if c in ['a', 'e', 'i', 'o', 'u']:
                ans += (i + 1) * (n - i)
        return ans

Java

class Solution {
    public long countVowels(String word) {
        long ans = 0;
        for (int i = 0, n = word.length(); i < n; ++i) {
            char c = word.charAt(i);
            if (c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u') {
                ans += (long) (i + 1) * (n - i);
            }
        }
        return ans;
    }
}

TypeScript

function countVowels(word: string): number {
    const n = word.length;
    let ans = 0;
    for (let i = 0; i < n; i++) {
        let char = word.charAt(i);
        if (["a", "e", "i", "o", "u"].includes(char)) {
            ans += (i + 1) * (n - i);
        }
    }
    return ans;
}

C++

class Solution {
public:
    long long countVowels(string word) {
        long long ans = 0;
        for (int i = 0, n = word.size(); i < n; ++i)
        {
            char c = word[i];
            if (c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u') ans += (long long) (i + 1) * (n - i);
        }
        return ans;
    }
};

Go

func countVowels(word string) int64 {
	var ans int64
	n := len(word)
	for i, c := range word {
		if c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u' {
			ans += int64((i + 1) * (n - i))
		}
	}
	return ans
}

...