统计完全子字符串

很不错的计数问题,用到了分组循环技巧和滑动窗口 代码的实现方式也非常值得多看

cpp 复制代码
class Solution {
public:
    int f(string s,int k){
        int res = 0;
        for(int m=1;m<=26&&k*m<=s.size();++m){
            int cnt[27]{};
            auto check=[&](){
                for(int i=0;i<=26;++i){
                    if(cnt[i]&&cnt[i]!=k)return;
                }
                res++;
            };

            for(int r=0;r<s.size();++r){
                cnt[s[r]-'a']++;
                int l = r+1-k*m;
                if(l>=0){
                    check();
                    cnt[s[l]-'a']--;
                }
            }
        }
        return res;
    }
    int countCompleteSubstrings(string word, int k) {
        int n = word.size();
        int res = 0;
        for(int i=0;i<n;){
            int start = i;
            ++i;
            while(i<n&&abs(int(word[i]-word[i-1]))<=2)++i;
            res+=f(word.substr(start,i-start),k);
        }
        return res;
    }
};
相关推荐
OYYHXPJR1 分钟前
算法重新刷题
数据结构·算法
zhendianluli2 分钟前
Python的多态
开发语言·python
捕风捉你4 分钟前
状态模式在金融业务中的应用及其框架实现
java·开发语言·状态模式
zhendianluli11 分钟前
Python魔法函数(Magic Methods简介
开发语言·python
passion更好21 分钟前
【matlab】【python】爬虫实战
爬虫·算法·matlab
YANG-Live30 分钟前
数据列表组件-报表
开发语言·javascript
Synaric35 分钟前
Android与Java后端联调RSA加密的注意事项
android·java·开发语言
Tech Synapse1 小时前
java 如何暴露header给前端
java·开发语言·前端
摸鱼的快乐你不懂1 小时前
金银铜牌排序【二维数组借用Arrays.sort方法进行排序】
数据结构
海涛高软1 小时前
python一堆数字相近的分成一组
开发语言·python