<p>Given a string <code>s</code>, return <em>the number of <strong>homogenous</strong> substrings of </em><code>s</code><em>.</em> Since the answer may be too large, return it <strong>modulo</strong> <code>10<sup>9</sup> + 7</code>.</p>

<p>A string is <strong>homogenous</strong> if all the characters of the string are the same.</p>

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

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

<pre>
<strong>Input:</strong> s = &quot;abbcccaa&quot;
<strong>Output:</strong> 13
<strong>Explanation:</strong> The homogenous substrings are listed as below:
&quot;a&quot;   appears 3 times.
&quot;aa&quot;  appears 1 time.
&quot;b&quot;   appears 2 times.
&quot;bb&quot;  appears 1 time.
&quot;c&quot;   appears 3 times.
&quot;cc&quot;  appears 2 times.
&quot;ccc&quot; appears 1 time.
3 + 1 + 2 + 1 + 3 + 2 + 1 = 13.</pre>

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

<pre>
<strong>Input:</strong> s = &quot;xy&quot;
<strong>Output:</strong> 2
<strong>Explanation:</strong> The homogenous substrings are &quot;x&quot; and &quot;y&quot;.</pre>

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

<pre>
<strong>Input:</strong> s = &quot;zzzzz&quot;
<strong>Output:</strong> 15
</pre>

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

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

class Solution:
    def countHomogenous(self, s: str) -> int:

        count = 1 
        res = []

        for r in range(1, len(s)):
            if s[r] == s[r-1]:
                count += 1 
            else:
                res.append(count)
                count = 1
        res.append(count)

        ans = 0 
        for ele in res:
            ans = ans + (ele * (ele + 1) // 2)

        return ans % 1_000_000_007





        # dic = defaultdict(int)
        # ans = 0 
        # res = []


        # for r in range(len(s)):
        #     while s[]

        # # for i in range(len(s)):
        #     # for j in range(i, len(s)):
        #     #     if s[i] == s[j]:
        #     #         ans += 1 
        #     #     else:
        #     #         break 
        # return ans % 1_000_000_007







            # if s[i] != s[i-1]:
            #     dic[s[i]] += 1 
            #     start = i 
            # else:
            #     while s[i] == s[i - 1]:
            #         i 
            #     # dic[s[i]] += 1 
            #     while start < i + 1:
            #         dic[s[start:i + 1]] += 1 
            #         start += 1 
        
        print('dic', dic)
        return 0



        
17600