2023-06-02 LeetCode每日一题(统计范围内的元音字符串数)

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]。

(5) 遍历查询结果,填入答案即可。

你可能感兴趣的:(LeetCode每日一题,leetcode,算法,数据结构)