2953. Count Complete Substrings
You are given a string word and an integer k.
A substring s of word is complete if:
Each character in s occurs exactly k times.
The difference between two adjacent characters is at most 2. That is, for any two adjacent characters c1 and c2 in s, the absolute difference in their positions in the alphabet is at most 2.
Return the number of complete substrings of word.
A substring is a non-empty contiguous sequence of characters in a string.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 class Solution { int helper (string& s, int k) { int n = s.length (); vector<vector<int >> pre (n+1 ); { vector<int > freq (26 ) ; pre[0 ] = freq; for (int i = 0 ; i < s.length (); i++) { freq[s[i]-'a' ] += 1 ; pre[i+1 ] = freq; } } int res = 0 ; for (int i = 0 ; i < s.length (); i++) { for (int j = i + k; j <= s.length () and (j - i) / k <= 26 ; j += k) { int t = (j - i) / k; bool ok = true ; bool over = false ; for (int x = 0 ; x < 26 ; x++) { int d = pre[j][x] - pre[i][x]; if (d == 0 ) continue ; if (d != k) ok = false ; if (d > k) over = true ; if (!ok) break ; if (d == k) t -= 1 ; } if (ok and t == 0 ) res += 1 ; if (over) break ; } } return res; } public : int countCompleteSubstrings (string word, int k) { string now = "" ; int res = 0 ; for (auto & ch : word) { if (now.size () == 0 or abs (now.back () - ch) <= 2 ) now.push_back (ch); else { res += helper (now,k); now = "" ; now.push_back (ch); } } res += helper (now,k); return res; } };