2559. 统计范围内的元音字符串数
提示
中等
32
相关企业
给你一个下标从 0 开始的字符串数组 words
以及一个二维整数数组 queries
。
每个查询 queries[i] = [li, ri]
会要求我们统计在 words
中下标在 li
到 ri
范围内(包含 这两个值)并且以元音开头和结尾的字符串的数目。
返回一个整数数组,其中数组的第 i
个元素对应第 i
个查询的答案。
注意:元音字母是 'a'
、'e'
、'i'
、'o'
和 'u'
。
示例 1:
输入:words = ["aba","bcb","ece","aa","e"], queries = [[0,2],[1,4],[1,1]] 输出:[2,3,0] 解释:以元音开头和结尾的字符串是 "aba"、"ece"、"aa" 和 "e" 。 查询 [0,2] 结果为 2(字符串 "aba" 和 "ece")。 查询 [1,4] 结果为 3(字符串 "ece"、"aa"、"e")。 查询 [1,1] 结果为 0 。 返回结果 [2,3,0] 。
示例 2:
输入:words = ["a","e","i"], queries = [[0,2],[0,1],[2,2]] 输出:[3,2,1] 解释:每个字符串都满足这一条件,所以返回 [3,2,1] 。
提示:
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
通过次数
10.7K
提交次数
17.5K
通过率
61.0%
题解思路:字符预处理+前缀和
以下是C++手写代码:
class Solution {
const string p="aeiouAEIOU";
public:vector<int> vowelStrings(vector<string>& words, vector<vector<int>>& queries) {int n=words.size();vector<int> count(n,0);for(int i=0;i<n;i++){char startC=words[i][0];char endC=words[i][words[i].size()-1];if (p.find(startC) != string::npos && p.find(endC) != string::npos){count[i]=1;}}vector<int> sum(n+1,0);for(int i=1;i<n+1;i++){sum[i]=sum[i-1]+count[i-1];}int m=queries.size();vector<int> ans(m,0);for(int i=0;i<m;i++){ans[i]=sum[queries[i][1]+1]-sum[queries[i][0]];}return ans;}
};
以下是kotlin机器生成代码:(部分手动修改!)
class Solution {fun vowelStrings(words: Array<String>, queries: Array<IntArray>): IntArray {val isTemp=IntArray(words.size)for(i in 0..words.size-1){if(isVowelString(words[i])){isTemp[i]=1;}}val counts = IntArray(queries.size)for (i in queries.indices) {val query = queries[i]var count = 0for (j in query[0]..query[1]) {if (isTemp[j]==1) {count++}}counts[i] = count}return counts}fun isVowelString(word: String): Boolean {val vowels = setOf('a', 'e', 'i', 'o', 'u')return vowels.contains(word.first()) && vowels.contains(word.last())}
}
从{}的风格就能看出来哪里修改了!