文章目录
1. 题目
2. 解题
1. 题目
子字符串 是字符串中的一个连续(非空)的字符序列。
元音子字符串 是 仅 由元音('a'、'e'、'i'、'o' 和 'u')组成的一个子字符串,且必须包含 全部五种 元音。
给你一个字符串 word ,统计并返回 word 中 元音子字符串的数目 。
示例 1: 输入:word = "aeiouu" 输出:2 解释:下面列出 word 中的元音子字符串(斜体加粗部分): - "aeiouu" - "aeiouu" 示例 2: 输入:word = "unicornarihan" 输出:0 解释:word 中不含 5 种元音,所以也不会存在元音子字符串。 示例 3: 输入:word = "cuaieuouac" 输出:7 解释:下面列出 word 中的元音子字符串(斜体加粗部分): - "cuaieuouac" - "cuaieuouac" - "cuaieuouac" - "cuaieuouac" - "cuaieuouac" - "cuaieuouac" - "cuaieuouac" 示例 4: 输入:word = "bbaeixoubb" 输出:0 解释:所有包含全部五种元音的子字符串都含有辅音,所以不存在元音子字符串。 提示: 1 <= word.length <= 100 word 仅由小写英文字母组成
2. 解题
- 暴力法
class Solution { public: int countVowelSubstrings(string word) { int ans = 0, a = 0, e = 0, i = 0, o = 0, u = 0, n = word.size(); unordered_set<char> set = {'a','e','i','o','u'}; for(int j = 0; j < n-4; ++j) { if(!set.count(word[j])) continue; a=e=i=o=u=0; for(int k = j; k < n; ++k) { if(!set.count(word[k])) break; else { if(word[k]=='a') a++; else if(word[k]=='e') e++; else if(word[k]=='i') i++; else if(word[k]=='o') o++; else if(word[k]=='u') u++; if(a&&e&&i&&o&&u) ans++; } } } return ans; } };
8 ms 6.2 MB C++ 2021/11/07 14:55