统计完全子字符串

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

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;
    }
};
相关推荐
Tisfy12 小时前
LeetCode 0836.矩形重叠:xy两方向分别看
数学·leetcode·题解·模拟
IT笔记12 小时前
Rust 迭代器多级链式调用执行顺序笔记
开发语言·笔记·rust
宣宣猪的小花园.12 小时前
【机器学习】损失函数与梯度下降:机器如何通过“犯错”不断变好
人工智能·算法·机器学习
雪落漂泊13 小时前
C++11(上)
开发语言·c++
青山木13 小时前
Hot 100 --- 最长递增子序列
java·数据结构·算法·leetcode·动态规划
春涧草茶13 小时前
慢就是快12-2三种访问权限|getter与setter|魔法方法
开发语言·python
無限進步D13 小时前
Java Web 前端 简介
java·开发语言·前端·css·html·css3·web
土司大王13 小时前
LeetCode hot100——33.搜索旋转排序数组:Java 二分模板与 O(log n) 实现
数据结构·算法·leetcode
不穿鞋的懒羊羊13 小时前
STL容器
算法
huang57914713 小时前
多线程环境下的共享数据结构安全问题分析4
算法