统计完全子字符串

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

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;
    }
};
相关推荐
蒸蒸yyyyzwd16 分钟前
面经学习笔记
c++·面试·八股
liliangcsdn23 分钟前
IC计算-前向/远期收益计算和代码示例
开发语言·python·pandas
麻辣布丁38 分钟前
java基础篇面试模拟
面试·职场和发展
小溪学编程38 分钟前
Java ListIterator 接口详解:双向遍历与列表修改的利器
java·开发语言·windows
影视飓风TIM39 分钟前
C++11 新特性:Lambda表达式、std::function与std::bind
开发语言·c++
土司大王43 分钟前
LeetCode hot100——全排列
java·算法·leetcode
sbjdhjd43 分钟前
在 8 字符、字母数字过滤与 PHP 版本差异下复盘临时文件命令执行链 | (8字符绕过)
android·java·开发语言·安全·web安全·数据挖掘·php
尾善爱看海1 小时前
前端面试算法手撕全解(高频真题+标准答案)
算法·js
欧特克_Glodon1 小时前
OpenCV计算机视觉开发入门与实践<三十六>:机器学习概述
c++·opencv·机器学习·计算机视觉
203号居民1 小时前
LeetCode hot 100 — 138. 随机链表的复制
算法·leetcode·链表