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)ifs = "LEETCODE"then"L","T","C","O","D"are the unique characters since they appear only once ins, thereforecountUniqueChars(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 <= 105sconsists 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;
};