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 <= 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;
};