统计完全子字符串

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

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;
    }
};
相关推荐
Mr YiRan几秒前
JNI技术之动态注册与JNI线程实战
开发语言
庄小法2 分钟前
pytest
开发语言·python·pytest
sonnet-10293 分钟前
堆排序算法
java·c语言·开发语言·数据结构·python·算法·排序算法
csdn_zhangchunfeng3 分钟前
Qt之智能指针使用建议
开发语言·qt
我是咸鱼不闲呀5 分钟前
力扣Hot100系列24(Java)——[回溯]总结(下)(括号生成,单词搜索,分割回文串)
java·算法·leetcode
2401_895521345 分钟前
Golang 构建学习
开发语言·学习·golang
tankeven6 分钟前
HJ150 全排列
c++·算法
Q741_1476 分钟前
每日一题 力扣 2946. 循环移位后的矩阵相似检查 力扣 155. 最小栈 数学 数组 模拟 C++ 题解
c++·算法·leetcode·矩阵·模拟·数组·
墨香幽梦客8 分钟前
大数据环境下的BI架构:Hadoop与Spark的企业级应用整理
java·开发语言
handsomethefirst10 分钟前
【算法与数据结构】【面试经典150题】【题41-题45】
数据结构·算法·leetcode