其他分享
首页 > 其他分享> > LeetCode 828. Count Unique Characters of All Substrings of a Given String

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.

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:

题解:

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 }

类似Total Appeal of A String.

标签:Count,Given,last,String,int,countUniqueChars,substrings,ind,unique
来源: https://www.cnblogs.com/Dylan-Java-NYC/p/16519462.html