Description
Let's define a function countUniqueChars(s)
that returns the number of unique characters inΒ s
.
- For example, calling
countUniqueChars(s)
ifs = "LEETCODE"
then"L"
,"T"
,"C"
,"O"
,"D"
are the unique characters since they appear only once ins
, thereforecountUniqueChars(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