A character is unique in string S
if it occurs exactly once in it.
For example, in string S = "LETTER"
, the only unique characters are "L"
and "R"
.
Let's define UNIQ(S)
as the number of unique characters in string S
.
For example, UNIQ("LETTER") = 2
.
Given a string S, calculate the sum of UNIQ(substring)
over all non-empty substrings of S
.
If there are two or more equal substrings at different positions in S
, we consider them different.
Since the answer can be very large, retrun the answer modulo 10 ^ 9 + 7
.
Example 1:
Input: "ABC" Output: 10 Explanation: All possible substrings are: "A","B","C","AB","BC" and "ABC". Evey substring is composed with only unique letters. Sum of lengths of all substring is 1 + 1 + 1 + 2 + 2 + 3 = 10
Example 2:
Input: "ABA" Output: 8 Explanation: The same as example 1, except uni("ABA") = 1.
Note: 0 <= S.length <= 10000
.
肯定不能一个个substring来做,换个角度,求每个字符的有效substring个数
class Solution(object): def uniqueLetterString(self, s): """ :type S: str :rtype: int """ d = {} res = 0 for i,c in enumerate(s): if c not in d: d[c] = [-1] else: k, j = d[c][-2:] res += (j-k)*(i-j) d[c].append(i) for c in d: k, j = d[c][-2:] res += (j-k)*(len(s)-j) return res