统计完全子字符串

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

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;
    }
};
相关推荐
染指11105 分钟前
3.AI大模型-token是什么-大模型底层运行机制
人工智能·算法·机器学习
肖恩想要年薪百万5 分钟前
JSP中常用JSTL标签
java·开发语言·状态模式
l1t17 分钟前
在aarch64机器上安装clang来生成codonjit python模块
开发语言·python
谙弆悕博士34 分钟前
快速学C语言——第19章:C语言常用开发库
c语言·开发语言·算法·业界资讯·常用函数
月落归舟34 分钟前
深入解析Java基础之基础
java·开发语言
光影少年35 分钟前
前端算法题
前端·javascript·算法
折哥的程序人生 · 物流技术专研35 分钟前
《Java 100 天进阶之路》第20篇:Java初始化、构造器、对象创建的过程
java·开发语言·后端·面试
南宫萧幕40 分钟前
基于 Simulink 与 Python 联合仿真的 eVTOL 强化学习全链路实战
开发语言·人工智能·python·算法·机器学习·控制
电魂泡哥42 分钟前
CMS垃圾回收
java·jvm·算法
Teleger42 分钟前
在window上使用c++控制鼠标点击,实现的exe
c++·单片机·计算机外设