3305.元音辅音字符串计数 I

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)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值