Back to all solutions
#828 - Count Unique Characters of All Substrings of a Given String
Problem 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.
Solution
/**
* @param {string} s
* @return {number}
*/
var uniqueLetterString = function(s) {
const n = s.length;
const lastPositions = {};
let result = 0;
for (let i = 0; i < n; i++) {
const char = s[i];
if (!lastPositions[char]) lastPositions[char] = [-1, -1];
const [prevPrev, prev] = lastPositions[char];
result += (i - prev) * (prev - prevPrev);
lastPositions[char] = [prev, i];
}
for (const char of Object.keys(lastPositions)) {
const [prev, pos] = lastPositions[char];
if (pos >= 0) result += (n - pos) * (pos - prev);
}
return result;
};