2 minutes
Leetcode 2083
2083. Substrings That Begin and End With the Same Letter
func numberOfSubstrings(s string) int64 {
    m := make(map[rune] int)
    res := int64(0)
    
    for _, letter := range s {
        m[letter]++
        res += int64(m[letter])
    }
    
    return res
}
The second solution is the fun solution. We can find the number of substrings, the beginning, and the end in the same letter. To show how this is done, we can take an example of "aaaaaa":

- Note that in this image, I am only pointing to the start and end letter of the substring.
- As you can see in the image, we can get a certain number of substrings in a string of 6 letters:- We can get 1substring of length6
- We can get 2substrings of length5
- We can get 3substrings of length4
- We can get 4substrings of length3
- We can get 5substrings of length2
- We can get 6substrings of length1
 
- We can get 
- Now if we add all the substrings together we get 1 + 2 + 3 + 4 + 5 + 6 = 21. This is equal to the sum of the first6numbers. The equation for the sum of the firstnnumbers is(n * (n + 1)) / 2, so if we maken = 6then(6 * (6 + 1)) / 2 = (6 * 7) / 2 = 42 / 2 = 21.
func numberOfSubstrings(s string) int64 {
    m := make(map[rune] int)
    res := int64(0)
    
    for _, letter := range s {
        m[letter]++
    }
    
    for _, val := range m {
        res += int64((val * (val + 1)) / 2)
    }
    
    return res
}
Read other posts