File tree Expand file tree Collapse file tree 4 files changed +71
-4
lines changed
1621.Number of Sets of K Non-Overlapping Line Segments
1624.Largest Substring Between Two Equal Characters Expand file tree Collapse file tree 4 files changed +71
-4
lines changed Original file line number Diff line number Diff line change @@ -201,6 +201,30 @@ func numberOfSets(n int, k int) int {
201
201
}
202
202
```
203
203
204
+ ### ** TypeScript**
205
+
206
+ ``` ts
207
+ function numberOfSets(n : number , k : number ): number {
208
+ const f = Array .from ({ length: n + 1 }, _ => new Array (k + 1 ).fill (0 ));
209
+ const g = Array .from ({ length: n + 1 }, _ => new Array (k + 1 ).fill (0 ));
210
+ f [1 ][0 ] = 1 ;
211
+ const mod = 10 ** 9 + 7 ;
212
+ for (let i = 2 ; i <= n ; ++ i ) {
213
+ for (let j = 0 ; j <= k ; ++ j ) {
214
+ f [i ][j ] = (f [i - 1 ][j ] + g [i - 1 ][j ]) % mod ;
215
+ g [i ][j ] = g [i - 1 ][j ];
216
+ if (j ) {
217
+ g [i ][j ] += f [i - 1 ][j - 1 ];
218
+ g [i ][j ] %= mod ;
219
+ g [i ][j ] += g [i - 1 ][j - 1 ];
220
+ g [i ][j ] %= mod ;
221
+ }
222
+ }
223
+ }
224
+ return (f [n ][k ] + g [n ][k ]) % mod ;
225
+ }
226
+ ```
227
+
204
228
### ** ...**
205
229
206
230
```
Original file line number Diff line number Diff line change @@ -152,6 +152,30 @@ func numberOfSets(n int, k int) int {
152
152
}
153
153
```
154
154
155
+ ### ** TypeScript**
156
+
157
+ ``` ts
158
+ function numberOfSets(n : number , k : number ): number {
159
+ const f = Array .from ({ length: n + 1 }, _ => new Array (k + 1 ).fill (0 ));
160
+ const g = Array .from ({ length: n + 1 }, _ => new Array (k + 1 ).fill (0 ));
161
+ f [1 ][0 ] = 1 ;
162
+ const mod = 10 ** 9 + 7 ;
163
+ for (let i = 2 ; i <= n ; ++ i ) {
164
+ for (let j = 0 ; j <= k ; ++ j ) {
165
+ f [i ][j ] = (f [i - 1 ][j ] + g [i - 1 ][j ]) % mod ;
166
+ g [i ][j ] = g [i - 1 ][j ];
167
+ if (j ) {
168
+ g [i ][j ] += f [i - 1 ][j - 1 ];
169
+ g [i ][j ] %= mod ;
170
+ g [i ][j ] += g [i - 1 ][j - 1 ];
171
+ g [i ][j ] %= mod ;
172
+ }
173
+ }
174
+ }
175
+ return (f [n ][k ] + g [n ][k ]) % mod ;
176
+ }
177
+ ```
178
+
155
179
### ** ...**
156
180
157
181
```
Original file line number Diff line number Diff line change
1
+ function numberOfSets ( n : number , k : number ) : number {
2
+ const f = Array . from ( { length : n + 1 } , _ => new Array ( k + 1 ) . fill ( 0 ) ) ;
3
+ const g = Array . from ( { length : n + 1 } , _ => new Array ( k + 1 ) . fill ( 0 ) ) ;
4
+ f [ 1 ] [ 0 ] = 1 ;
5
+ const mod = 10 ** 9 + 7 ;
6
+ for ( let i = 2 ; i <= n ; ++ i ) {
7
+ for ( let j = 0 ; j <= k ; ++ j ) {
8
+ f [ i ] [ j ] = ( f [ i - 1 ] [ j ] + g [ i - 1 ] [ j ] ) % mod ;
9
+ g [ i ] [ j ] = g [ i - 1 ] [ j ] ;
10
+ if ( j ) {
11
+ g [ i ] [ j ] += f [ i - 1 ] [ j - 1 ] ;
12
+ g [ i ] [ j ] %= mod ;
13
+ g [ i ] [ j ] += g [ i - 1 ] [ j - 1 ] ;
14
+ g [ i ] [ j ] %= mod ;
15
+ }
16
+ }
17
+ }
18
+ return ( f [ n ] [ k ] + g [ n ] [ k ] ) % mod ;
19
+ }
Original file line number Diff line number Diff line change 52
52
53
53
<!-- 这里可写通用的实现逻辑 -->
54
54
55
- ** 方法一:数组/哈希表 **
55
+ ** 方法一:数组或哈希表 **
56
56
57
- 用数组或哈希表记录每个字符第一次出现的位置 。
57
+ 用数组或哈希表记录字符串 $s$ 每个字符第一次出现的位置。由于本题中字符串 $s$ 只含小写英文字母,因此可以用一个长度为 $26$ 的数组 $d$ 来记录,初始时数组元素值均为 $-1$ 。
58
58
59
- 遍历字符串每个字符 $ c$,若 $c$ 在数组中的值为 $-1$,则更新为当前位置,否则答案更新为当前位置与数组中的值的差值的最大值 。
59
+ 遍历字符串 $s$ 中每个字符 $ c$,若 $c$ 在数组中的值为 $-1$,则更新为当前位置 $i$;否则我们将答案更新为当前位置 $i$ 与数组中的值 $d [ c ] $ 的差值的最大值减一,即 $ans = \max (ans, i - d [ c ] -1)$ 。
60
60
61
- 时间复杂度 $O(n)$,空间复杂度 $O(C)$。其中 $n$ 为字符串长度,而 $C$ 为字符集大小 。
61
+ 时间复杂度 $O(n)$,空间复杂度 $O(C)$。其中 $n$ 为字符串长度,而 $C$ 为字符串 $s$ 的字符集大小,本题 $C=26$ 。
62
62
63
63
<!-- tabs:start -->
64
64
You can’t perform that action at this time.
0 commit comments