统计完全子字符串

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

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;
    }
};
相关推荐
weitingfu8 分钟前
Excel VBA 入门到精通(二):变量、数据类型与运算符
java·大数据·开发语言·学习·microsoft·excel·vba
光电笑映10 分钟前
STL 源码解密:unordered 系列容器的底层复用与哈希策略
算法·哈希算法·散列表
foundbug99918 分钟前
无人机离散系统模型预测控制(MPC)MATLAB实现
开发语言·matlab·无人机
6Hzlia21 分钟前
【Hot 100 刷题计划】 LeetCode 215. 数组中的第K个最大元素 | C++ 快速选择与堆排序题解
c++·算法·leetcode
小白菜又菜21 分钟前
Leetcode 3070. Count Submatrices with Top-Left Element and Sum Less Than k
算法·leetcode·职场和发展
爱写代码的小朋友27 分钟前
使用 Nuitka 打包 Python 应用:从入门到进阶
开发语言·python
yuan1999731 分钟前
C# 断点续传下载文件工具设计与实现
开发语言·c#
想唱rap33 分钟前
线程之条件变量和生产消费模型
java·服务器·开发语言·数据库·mysql·ubuntu
笨笨饿35 分钟前
32_复变函数在工程中实际应用区别于联系
linux·服务器·c语言·人工智能·单片机·算法·学习方法
「QT(C++)开发工程师」41 分钟前
C++17三大实用特性详解:内联变量、std::optional、std::variant
jvm·c++