<p>You are given a string <code>word</code> and an integer <code>k</code>.</p>

<p>A substring <code>s</code> of <code>word</code> is <strong>complete</strong> if:</p>

<ul>
	<li>Each character in <code>s</code> occurs <strong>exactly</strong> <code>k</code> times.</li>
	<li>The difference between two adjacent characters is <strong>at most</strong> <code>2</code>. That is, for any two adjacent characters <code>c1</code> and <code>c2</code> in <code>s</code>, the absolute difference in their positions in the alphabet is <strong>at most</strong> <code>2</code>.</li>
</ul>

<p>Return <em>the number of <strong>complete </strong>substrings of</em> <code>word</code>.</p>

<p>A <strong>substring</strong> is a <strong>non-empty</strong> contiguous sequence of characters in a string.</p>

<p>&nbsp;</p>
<p><strong class="example">Example 1:</strong></p>

<pre>
<strong>Input:</strong> word = &quot;igigee&quot;, k = 2
<strong>Output:</strong> 3
<strong>Explanation:</strong> The complete substrings where each character appears exactly twice and the difference between adjacent characters is at most 2 are: <u><strong>igig</strong></u>ee, igig<u><strong>ee</strong></u>, <u><strong>igigee</strong></u>.
</pre>

<p><strong class="example">Example 2:</strong></p>

<pre>
<strong>Input:</strong> word = &quot;aaabbbccc&quot;, k = 3
<strong>Output:</strong> 6
<strong>Explanation:</strong> The complete substrings where each character appears exactly three times and the difference between adjacent characters is at most 2 are: <strong><u>aaa</u></strong>bbbccc, aaa<u><strong>bbb</strong></u>ccc, aaabbb<u><strong>ccc</strong></u>, <strong><u>aaabbb</u></strong>ccc, aaa<u><strong>bbbccc</strong></u>, <u><strong>aaabbbccc</strong></u>.
</pre>

<p>&nbsp;</p>
<p><strong>Constraints:</strong></p>

<ul>
	<li><code>1 &lt;= word.length &lt;= 10<sup>5</sup></code></li>
	<li><code>word</code> consists only of lowercase English letters.</li>
	<li><code>1 &lt;= k &lt;= word.length</code></li>
</ul>

from collections import defaultdict

class Solution:
    def countCompleteSubstrings(self, word: str, k: int) -> int:
        def is_valid_segment(segment):
            """Check if the segment has valid character differences."""
            return all(abs(ord(segment[i]) - ord(segment[i - 1])) <= 2 for i in range(1, len(segment)))

        def count_valid_substrings(segment):
            """Count substrings of length m where each character appears exactly k times."""
            n = len(segment)
            count = 0
            for length in range(k, k * 27, k):  # Check lengths k, 2k, ..., 26k
                if length > n:
                    break

                freq = defaultdict(int)
                valid_count = 0
                start = 0
                end = 0

                while end < n:
                    if end - start + 1 <= length:
                        freq[segment[end]] += 1
                        if freq[segment[end]] == k:
                            valid_count += 1
                        end += 1
                    if end - start == length:
                        if valid_count == length // k:
                            count += 1
                        freq[segment[start]] -= 1
                        if freq[segment[start]] == k - 1:
                            valid_count -= 1
                        start += 1
            return count

        # Split the string into valid segments
        segments = []
        start = 0
        while start < len(word):
            end = start
            while end < len(word) and (end == start or abs(ord(word[end]) - ord(word[end - 1])) <= 2):
                end += 1
            segments.append(word[start:end])
            start = end
        
        # Count valid substrings in each segment
        total_count = 0
        for segment in segments:
            if is_valid_segment(segment):
                total_count += count_valid_substrings(segment)
        
        return total_count

2626