题目描述
给你一个字符串 word ,返回 word 的所有子字符串中 元音的总数 ,元音是指 'a'、'e'、'i'、'o' 和 'u' 。
子字符串 是字符串中一个连续(非空)的字符序列。
注意:由于对 word 长度的限制比较宽松,答案可能超过有符号 32 位整数的范围。计算时需当心。
思路分析
- 带有前缀和的思想,记录以每个当前字符为结尾的所有子字符串的元音个数(累加的),即prevValidCharNum + i + 1
- 又有dp的思想
Source code
class Solution {
public:
map<char,int> mp;
long long countVowels(string word)
{
mp['a']=1;mp['e']=1;mp['i']=1;mp['o']=1;mp['u']=1;
int wrdSize = word.size();
long long ans = 0;
long long prevValidCharNum = 0; //除了后面可能加入的元音外,每一个以当前字母结尾的所有字串的元音总数
if(mp[word[0]]) { ans = 1; prevValidCharNum = 1;} //初始状态
for(int i = 1; i < wrdSize ; i++){
if(mp[word[i]]){
ans += prevValidCharNum + i + 1;
prevValidCharNum = prevValidCharNum + i + 1;
}
else ans += prevValidCharNum;
}
return ans;
}
};