Skip to content

828. Count Unique Characters of All Substrings of a Given String

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.

 

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.

 

Solutions

Solution: Dynamic Programming

  • Time complexity: O(n)
  • Space complexity: O(26)

 

JavaScript

js
/**
 * @param {string} s
 * @return {number}
 */
const uniqueLetterString = function (s) {
  const BASE_CODE = 'A'.charCodeAt(0);
  const n = s.length;
  const lastCount = Array.from({length: 26}).fill(0);
  const lastSeen = Array.from({length: 26}).fill(-1);
  let dp = 0;
  let result = 0;

  for (let index = 0; index < n; index++) {
    const code = s[index].charCodeAt(0) - BASE_CODE;
    const count = index - lastSeen[code];

    dp += count - lastCount[code];
    lastCount[code] = count;
    lastSeen[code] = index;
    result += dp;
  }
  return result;
};

Released under the MIT license