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