统计完全子字符串

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

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;
    }
};
相关推荐
喜欢打篮球的普通人5 分钟前
LLVM 架构设计与原理:为什么它能取代 GCC 成为新宠
c语言·开发语言
NEFU_Jyj6 分钟前
牛客周赛R166(max型瓶颈最短路,前后缀DP合并)
算法·深度优先
要练八块腹肌12 分钟前
红黑树的实现以及对map和set的封装
c++
Tisfy14 分钟前
LeetCode 3644.排序排列:不对则与(脑筋急转弯)
数据结构·算法·leetcode·题解·位运算
外收内放24 分钟前
FastAPI猜字谜实战(3):把每一局存成JSON
开发语言·python·学习·json·fastapi
tedcloud12326 分钟前
Docker Compose 部署 Memos:从安装到备份恢复
linux·开发语言·jvm·后端·docker·容器·rust
镜子AI27 分钟前
镜子AI案例工程复盘:用Python给GEO效果做抽样检测与置信区间估计
开发语言·人工智能·python
骑着蜗牛撵大象32731 分钟前
从三次握手到 epoll:C++ 写出可落地的 TCP Socket 服务端
网络·c++·tcp/ip·高并发·tcp·epoll
春涧草茶32 分钟前
慢就是快15-1 多进程 多线程
开发语言·python
pan_junbiao33 分钟前
Go语言中的空白标识符
开发语言·后端·golang