1
1
class Solution {
2
2
public List <Integer > findSubstring (String s , String [] words ) {
3
3
Map <String , Integer > cnt = new HashMap <>();
4
- for (String w : words ) {
4
+ for (var w : words ) {
5
5
cnt .merge (w , 1 , Integer ::sum );
6
6
}
7
- int m = s .length (), n = words .length ;
8
- int k = words [0 ].length ();
9
7
List <Integer > ans = new ArrayList <>();
8
+ int m = s .length (), n = words .length , k = words [0 ].length ();
10
9
for (int i = 0 ; i < k ; ++i ) {
11
- Map <String , Integer > cnt1 = new HashMap <>();
12
10
int l = i , r = i ;
13
- int t = 0 ;
11
+ Map < String , Integer > cnt1 = new HashMap <>() ;
14
12
while (r + k <= m ) {
15
- String w = s .substring (r , r + k );
13
+ var t = s .substring (r , r + k );
16
14
r += k ;
17
- if (!cnt .containsKey (w )) {
15
+ if (!cnt .containsKey (t )) {
18
16
cnt1 .clear ();
19
17
l = r ;
20
- t = 0 ;
21
18
continue ;
22
19
}
23
- cnt1 .merge (w , 1 , Integer ::sum );
24
- ++t ;
25
- while (cnt1 .get (w ) > cnt .get (w )) {
26
- String remove = s .substring (l , l + k );
20
+ cnt1 .merge (t , 1 , Integer ::sum );
21
+ while (cnt1 .get (t ) > cnt .get (t )) {
22
+ String w = s .substring (l , l + k );
23
+ if (cnt1 .merge (w , -1 , Integer ::sum ) == 0 ) {
24
+ cnt1 .remove (w );
25
+ }
27
26
l += k ;
28
- cnt1 .merge (remove , -1 , Integer ::sum );
29
- --t ;
30
27
}
31
- if (t == n ) {
28
+ if (r - l == n * k ) {
32
29
ans .add (l );
33
30
}
34
31
}
35
32
}
36
33
return ans ;
37
34
}
38
- }
35
+ }
0 commit comments