Leetcode: 2262. Total Appeal of A String

Problem Statement

class Solution:
    def appealSum(self, s: str) -> int:
        N = len(s)
        last = defaultdict(lambda: -1)
        prev = [-1] * N
        for i in range(N):
            prev[i] = last[s[i]]
            last[s[i]] = i
        ans = 0
        for i in range(N):
            ans += (N - i) * (i - prev[i])
        return ans