Skip to content
Rain Hu's Workspace
Go back

[LeetCode] 2953. Count Complete Substrings

Rain Hu
class Solution {
public:
    int countCompleteSubstrings(string s, int k) {
        int n = s.size();
        int res = 0;
        for (int idx = 1; idx <= 26 && idx * k <= n; idx++) {
            int len = idx * k;
            int j = -1;
            vector<int> cnt(26, 0);
            int valid = 0;
            for (int i = 0; i < len; i++) {
                if (i > 0 && abs(s[i] - s[i-1]) > 2) {
                    j = i-1;
                }
                if (++cnt[s[i]-'a'] == k) valid++;
            }
            if (valid == idx && j < 0) {
                res++;
            }

            for (int i = len; i < n; i++) {
                if (abs(s[i] - s[i-1]) > 2) {
                    j = i-1;
                }
                if (++cnt[s[i]-'a'] == k) valid++;
                if (cnt[s[i-len]-'a']-- == k) valid--;
                if (valid == idx && i-len >= j) {
                    res++;
                }
            }
        }
        return res;
    }
};

Share this post on:

Previous
[LeetCode] 1293. Shortest Path in a Grid with Obstacles Elimination
Next
[LeetCode] 2136. Earliest Possible Day of Full Bloom