LeetCode 828. Count Unique Characters of All Substrings of a Given String
原题链接在这里:https://leetcode.com/problems/count-unique-characters-of-all-substrings-of-a-given-string/
题目:
Let's define a function countUniqueChars(s)
that returns the number of unique characters on 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.
题解:
Instead of counting unique characters of all the substrings, we could for each character, how many substrings it could contribute as unique character.
XAXXAXXXX, for the first A, it could contribute to XA, A, AX, AXX, XAX, XAXX, 2 * 3 = 6. There are 2 choices before A and 3 choices after A.
Thus for each index, mark the last two occurance of its apparence.
Time Complexity: O(n). n = s.length().
Space: O(1).
AC Java:
1 class Solution { 2 public int uniqueLetterString(String s) { 3 int [][] last = new int[26][2]; 4 for(int i = 0; i < 26; i++){ 5 Arrays.fill(last[i], - 1); 6 } 7 8 int res = 0; 9 for(int i = 0; i < s.length(); i++){ 10 int ind = s.charAt(i) - 'A'; 11 res += (i - last[ind][1]) * (last[ind][1] - last[ind][0]); 12 last[ind] = new int[]{last[ind][1], i}; 13 } 14 15 for(int i = 0; i < 26; i++){ 16 res += (s.length() - last[i][1]) * (last[i][1] - last[i][0]); 17 } 18 19 return res; 20 } 21 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】