1.题目
2.思路
使用滑动窗口。每个窗口必须≥5+k(5个元音加k个辅音),所以遍历时候遍历到i=长度-5-k即可。设置六个标记flaga,flago,flagu,flagi,flage,flagk,,分别记录五个元音是否出现及辅音出现次数(其实这个地方用字典会更好些,但五个标记也不算太多)。
当刚好满足五个元音及k个辅音数时,count++;再找下一个字母,如果还是原因count可以再+1,否则break,标志位全部置0,从下一个字母开始重新滑动窗口。
3.代码
class Solution {
public:
int countOfSubstrings(string word, int k) {
int n = word.size();
int falga = 0,falgi = 0,falgo = 0,falgu = 0,falge = 0,falgk = 0;
int count = 0;
for(int i = 0;i<=n-k-5;i++){
int j = i;
while(falgk<=k&&j<n){
if(word[j]=='a'){
falga = 1;
}else if(word[j]=='o'){
falgo = 1;
}else if(word[j]=='u'){
falgu = 1;
}else if(word[j]=='i'){
falgi = 1;
}else if(word[j]=='e'){
falge = 1;
}else{
falgk++;
}
if(falga == 1&&falgi ==1&&falgo == 1&&falgu == 1&&falge == 1
&&falgk== k){
count++;
if(j<n-1 && word[j+1]=='a'&&word[j+1]=='o'
&&word[j+1]=='e'&&word[j+1]=='i'&&word[j+1]=='u'){
break;
}
}
j++;
}
falga = 0,falgi = 0,falgo = 0,falgu = 0,falge = 0,falgk = 0;
}
return count;
}
};
4.复杂度:(如有不对,感谢指正)
时间:O(kN)(官方给出的)
空间:O(1)