Problem Link

Description


Let's define a function countUniqueChars(s) that returns the number of unique characters inΒ 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.

Solution


Python3

class Solution:
    def uniqueLetterString(self, s: str) -> int:
        N = len(s)
 
        left = [i + 1 for i in range(N)]
        mp = {}
 
        for i, x in enumerate(s):
            if x in mp:
                left[i] = i - mp[x]
            
            mp[x] = i
        
        right = [N - i for i in range(N)]
        mp = {}
 
        for i in range(N - 1, -1, -1):
            if s[i] in mp:
                right[i] = mp[s[i]] - i
 
            mp[s[i]] = i
 
        
        res = 0
        for i, x in enumerate(s):
            res += left[i] * right[i]
 
        return res