## Algorithm

Problem Name: 828. Count Unique Characters of All Substrings of a Given String

Let's define a function `countUniqueChars(s)` that returns the number of unique characters on `s`.

• For example, calling `countUniqueChars(s)` if `s = "LEETCODE"` then `"L"`, `"T"`, `"C"`, `"O"`, `"D"` are the unique characters since they appear only once in `s`, therefore `countUniqueChars(s) = 5`.

Given a string `s`, return the sum of `countUniqueChars(t)` where `t` is a substring of `s`. The test cases are generated such that the answer fits in a 32-bit integer.

Notice that some substrings can be repeated so in this case you have to count the repeated ones too.

Example 1:

```Input: s = "ABC"
Output: 10
Explanation: All possible substrings are: "A","B","C","AB","BC" and "ABC".
Every substring is composed with only unique letters.
Sum of lengths of all substring is 1 + 1 + 1 + 2 + 2 + 3 = 10
```

Example 2:

```Input: s = "ABA"
Output: 8
Explanation: The same as example 1, except `countUniqueChars`("ABA") = 1.```

Example 3:

```Input: s = "LEETCODE"
Output: 92
```

Constraints:

• `1 <= s.length <= 105`
• `s` consists of uppercase English letters only.

## Code Examples

### #1 Code Example with Javascript Programming

```Code - Javascript Programming```

``````
const uniqueLetterString = function(s) {
const n = s.length
const arr = Array.from({ length: 26 }, () => Array(2).fill(-1))
const A = 'A'.charCodeAt(0)
let res = 0
for(let i = 0; i < n; i++) {
const idx = s.charCodeAt(i) - A
res += (i - arr[idx]) * (arr[idx] - arr[idx])
arr[idx] = [arr[idx], i]
}

for(let i = 0; i < 26; i++) {
res += (n - arr[i]) * (arr[i] - arr[i])
}

return res
};
``````
Copy The Code &

Input

cmd
s = "ABC"

Output

cmd
10

### #2 Code Example with Python Programming

```Code - Python Programming```

``````
class Solution:
def uniqueLetterString(self, S):
index = {c: [-1, -1] for c in string.ascii_uppercase}
res = 0
for i, c in enumerate(S):
k, j = index[c]
res += (i - j) * (j - k)
index[c] = [j, i]
for c in index:
k, j = index[c]
res += (len(S) - j) * (j - k)
return res % (10**9 + 7)
``````
Copy The Code &

Input

cmd
s = "ABC"

Output

cmd
10