4 条题解

  • 1
    @ 2026-3-31 17:14:00

    套滑动窗口板子就行,注意结果要开long long

    #include<bits/stdc++.h>    
    using namespace std;
    int cnt[200];
    string s;
    int k;
    int main()
    {
        cin >> s>>k;
        s = " " + s;
        int n = s.size() - 1;
        //直接滑动窗口
        memset(cnt, 0, sizeof(cnt));
        int l = 1, r = 0;
        long long ans = 0;//记录满足字串的数量,要开long long
        for (; l <= n;l++)
        {
            while(r<n) //每一个l情况下,找到最长子串就能找到,对应的字串数量
            {
                r++;
                cnt[s[r]]++;//记录字符出现次数
                if(cnt[s[r]]>k)
                {
                    cnt[s[r]]--;     //值回退优先于,r回退
                    r--;
                    break;
                }
            }
            ans += r - l + 1;//对应的所以字串数量
            cnt[s[l]]--;
        }
        cout << ans << endl;
        return 0;
    }
    
    
    
    

    信息

    ID
    679
    时间
    1000ms
    内存
    256MiB
    难度
    4
    标签
    递交数
    208
    已通过
    86
    上传者