Skip to content

Commit 065f415

Browse files
authored
Create Readme.md
1 parent 4eeb94c commit 065f415

File tree

1 file changed

+14
-0
lines changed
  • Hash/828.Count-Unique-Characters-of-All-Substrings-of-a-Given-String

1 file changed

+14
-0
lines changed
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
828.Count-Unique-Characters-of-All-Substrings-of-a-Given-String
2+
3+
暴力的方法是枚举substring,然后考察这个区间里的字符哪些是unique的。这需要大致```o(N^2*26)```的复杂度。聪明的方法是考察每个字符,它可能在哪些substring里是unique的。
4+
5+
我们逐一遍历每个字符,现在考虑以i为结尾的各种substring。假设字符A在i之前最近两次出现的位置分别是a和b,如下图
6+
```
7+
X X X X A X X [A X X i]
8+
a b
9+
```
10+
显然,形如[a+1:i], [a+2:i], ... [b:i]这些substring(总共b-a个)里面只出现过一次A,也就是说对于这些substring而言,A给它们的countUniqueChars都贡献了一分。我们可以直接将b-a分加入到全局的答案中。而以其他任何位置作为起点的substring,A都无法给countUniqueChars贡献分数了。
11+
12+
同理,我们可以考察字符B,C,...他们对以i结尾的substring的贡献,将这些分数直接加入总分里面。
13+
14+
综上,每考察一个位置i,我们遍历26个字母(即A-Z)在i之前出现的最后两个位置,可以计算它们各自可以给多少substring贡献UniqueChars。总的时间复杂度是o(26N)。

0 commit comments

Comments
 (0)