Leetcode: 828. Count Unique Characters of All Substrings of a Given String
Problem Statement
class Solution:
def uniqueLetterString(self, s: str) -> int:
N = len(s)
nxt = {}
last = {}
for c in set(s):
last[c] = N
nxt[N, c] = N
for i in range(N - 1, -1, -1):
nxt[i, s[i]] = last[s[i]]
last[s[i]] = i
ans = 0
cur = 0
for i in range(N - 1, -1, -1):
j = nxt[i, s[i]]
k = nxt[j, s[i]]
cur += (j - i) - (k - j)
ans += cur
return ans
assert Solution().uniqueLetterString("ABC") == 10
assert Solution().uniqueLetterString("ABA") == 8
assert Solution().uniqueLetterString("LEETCODE") == 92