定义每个words下标如果是以元音开头和结尾的字符串为1,否则为2,那么每个下标的值为0或1,根据题目要求判断区间内所有下标加起来有多少个,因为是多组数据判断,所以可以用前缀和处理从0~n之间的和,在查询时两个区间做差即可。
class Solution {
public:
vector<int> vowelStrings(vector<string>& words, vector<vector<int>>& queries) {
int n=words.size();
int ans[n+1];
int cur=0;
for(int i=0;i<n;i++)
{
cur=judge(words[i]);
ans[i+1]=ans[i]+cur;
}
int n1=queries.size();
vector<int>result;
for(int i=0;i<n1;i++)
{
result[i]=(ans[queries[i][1]+1]-ans[queries[i][0]]);
}
return result;
}
int judge(string words)
{
if(ku(words[0])&&ku(words.back())) return 1;
else return 0;
}
int ku(char a)
{
if(a=='a'||a=='e'||a=='i'||a=='o'||a=='u') return 1;
else return 0;
}
};
在面对对一组数据需要加和在给定区间中多次读取数据时,前缀和可以大大减小时间复杂度