<p>You are given a string <code>s</code> that consists of lowercase English letters.</p>

<p>A string is called <strong>special</strong> if it is made up of only a single character. For example, the string <code>&quot;abc&quot;</code> is not special, whereas the strings <code>&quot;ddd&quot;</code>, <code>&quot;zz&quot;</code>, and <code>&quot;f&quot;</code> are special.</p>

<p>Return <em>the length of the <strong>longest special substring</strong> of </em><code>s</code> <em>which occurs <strong>at least thrice</strong></em>, <em>or </em><code>-1</code><em> if no special substring occurs at least thrice</em>.</p>

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

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

<pre>
<strong>Input:</strong> s = &quot;aaaa&quot;
<strong>Output:</strong> 2
<strong>Explanation:</strong> The longest special substring which occurs thrice is &quot;aa&quot;: substrings &quot;<u><strong>aa</strong></u>aa&quot;, &quot;a<u><strong>aa</strong></u>a&quot;, and &quot;aa<u><strong>aa</strong></u>&quot;.
It can be shown that the maximum length achievable is 2.
</pre>

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

<pre>
<strong>Input:</strong> s = &quot;abcdef&quot;
<strong>Output:</strong> -1
<strong>Explanation:</strong> There exists no special substring which occurs at least thrice. Hence return -1.
</pre>

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

<pre>
<strong>Input:</strong> s = &quot;abcaba&quot;
<strong>Output:</strong> 1
<strong>Explanation:</strong> The longest special substring which occurs thrice is &quot;a&quot;: substrings &quot;<u><strong>a</strong></u>bcaba&quot;, &quot;abc<u><strong>a</strong></u>ba&quot;, and &quot;abcab<u><strong>a</strong></u>&quot;.
It can be shown that the maximum length achievable is 1.
</pre>

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

<ul>
	<li><code>3 &lt;= s.length &lt;= 5 * 10<sup>5</sup></code></li>
	<li><code>s</code> consists of only lowercase English letters.</li>
</ul>

class Solution:
    def maximumLength(self, s: str) -> int:
        
        groups = defaultdict(list)
        res = -1
        n = len(s)
        
        prev = None
        curCount = 0
        
        # Grouping all the characters from a->z and taking the top 3 groups
        for c in s + '.':
            if c != prev:
                if prev != None:
                    groups[prev].append(curCount)
                    groups[prev] = sorted(groups[prev], reverse=True)[:3]
                prev = c
                curCount = 1
            else:
                curCount += 1
        
        
        for c in string.ascii_lowercase:
            if c not in groups:
                continue
                
            group_lengths = groups[c]
            no_of_group = len(group_lengths)
            
            # handles first case when only single group
            ans = group_lengths[0]-2

            # 2 groups
            if no_of_group==2:
                x,y = group_lengths

                # checking for n-1 case for a better answer
                if y>=x-1:
                    ans=max(ans, x-1)

            # 3 groups
            elif no_of_group==3:
                x,y,z = group_lengths
                
                # checking for best answer of n
                if x==y==z:
                    ans = max(ans, x)
                    
                # checking for n-1 case for a better answer
                elif y>=x-1:
                    ans=max(ans, x-1)
            
            # to handle case when single group with length < 3
            # so we'll get ans as 0 / -1. We don't want to consider it.
            if ans > 0:
                res = max(res, ans)
                
        return res
468