> For the complete documentation index, see [llms.txt](https://jimmylin1991.gitbook.io/practice-of-algorithm-problems/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://jimmylin1991.gitbook.io/practice-of-algorithm-problems/string/395.-longest-substring-with-at-least-k-repeating-characters.md).

# 395. Longest Substring with At Least K Repeating Characters

Find the length of the longest substring **T** of a given string (consists of lowercase letters only) such that every character in **T** appears no less than k times.

**Example 1:**

```
Input:
s = "aaabb", k = 3

Output:
3

The longest substring is "aaa", as 'a' is repeated 3 times.
```

**Example 2:**

```
Input:
s = "ababbc", k = 2

Output:
5

The longest substring is "ababb", as 'a' is repeated 2 times and 'b' is repeated 3 times.
```

```cpp
// Sliding Window
int longestSubstring(string s, int k) { // time: O(n^2); space: O(1)
    int begin = 0, d = 0, n = s.length();
    while (begin + k <= n) {
        vector<int> count(26, 0);
        int mask = 0, maxLast = begin;
        for (int end = begin; end < n; ++end) {
            int idx = s[end] - 'a';
            ++count[idx];
            // bitmask toggling
            if (count[idx] < k) {
                mask |= (1 << idx);
            } else {
                mask &= (~(1 << idx));
            }
            if (mask == 0) {
                d = max(d, end - begin + 1);
                maxLast = end;
            }
        }
        begin = maxLast + 1;
    }
    return d;
}
```
