2023-06-02每日一题
一、题目编号
2559. 统计范围内的元音字符串数
二、题目链接
点击跳转到题目位置
三、题目描述
给你一个下标从 0 开始的字符串数组 words 以及一个二维整数数组 queries 。
每个查询 queries[i] = [li, ri] 会要求我们统计在 words 中下标在 li 到 ri 范围内(包含 这两个值)并且以元音开头和结尾的字符串的数目。
返回一个整数数组,其中数组的第 i 个元素对应第 i 个查询的答案。
注意:元音字母是 ‘a’、‘e’、‘i’、‘o’ 和 ‘u’ 。
提示:
- 1 <= words.length <= 105
- 1 <= words[i].length <= 40
- words[i] 仅由小写英文字母组成
- sum(words[i].length) <= 3 * 105
- 1 <= queries.length <= 105
- 0 <= queries[j][0] <= queries[j][1] < words.length
四、解题代码
class Solution {
bool judge(char ch){
if(ch == 'a' || ch == 'e' || ch == 'i' || ch == 'o' || ch == 'u'){
return true;
}
return false;
}
bool judge_string(string s){
if(judge(s[0]) == true && judge(s[s.size() - 1]) == true){
return true;
}
return false;
}
public:
vector<int> vowelStrings(vector<string>& words, vector<vector<int>>& queries) {
vector<int> res;
int n = words.size();
int perifix_sum[n+1];
for(int i = 1; i <= n; ++i){
if(judge_string(words[i-1]) == true){
perifix_sum[i] = perifix_sum[i-1] + 1;
} else{
perifix_sum[i] = perifix_sum[i-1];
}
}
int m = queries.size();
for(int i = 0; i < m; ++i){
int x = queries[i][0];
int y = queries[i][1];
res.push_back(perifix_sum[y+1] - perifix_sum[x]);
}
return res;
}
};
五、解题思路
(1) 采用前缀和来帮助统计l ~ r区间内所有符合要求的字符串的个数。
(2) 写一个函数,用来判断该字符是否是元音字符。
(3) 写一个函数,用来判断该字符串是否满足首尾都是元音字符。这需要调用 (2) 中所说的函数
(4) 0 ~ x 区间内的符合要求的字符串数量记作perifix_sum[x + 1],那么l ~ r 区间内为 perifix_sum[r+1] -
perifix_sum[l]。文章来源:https://www.toymoban.com/news/detail-468162.html
(5) 遍历查询结果,填入答案即可。文章来源地址https://www.toymoban.com/news/detail-468162.html
到了这里,关于2023-06-02 LeetCode每日一题(统计范围内的元音字符串数)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!