File tree Expand file tree Collapse file tree 3 files changed +39
-48
lines changed
solution/0000-0099/0003.Longest Substring Without Repeating Characters Expand file tree Collapse file tree 3 files changed +39
-48
lines changed Original file line number Diff line number Diff line change @@ -245,23 +245,20 @@ use std::collections::HashSet;
245
245
246
246
impl Solution {
247
247
pub fn length_of_longest_substring (s : String ) -> i32 {
248
- let n = s . len ();
249
- let cs : Vec <char > = s . chars (). collect ();
248
+ let s = s . as_bytes ();
250
249
let mut set = HashSet :: new ();
251
- let mut l = 0 ;
252
- let mut r = 0 ;
253
- let mut res = 0 ;
254
- while r != n {
255
- let k = cs [r ];
256
- while set . contains (& k ) {
257
- set . remove (& cs [l ]);
258
- l += 1 ;
259
- }
260
- set . insert (k );
261
- res = res . max (set . len ());
262
- r += 1 ;
263
- }
264
- res as i32
250
+ let mut i = 0 ;
251
+ s . iter ()
252
+ . map (| c | {
253
+ while set . contains (& c ) {
254
+ set . remove (& s [i ]);
255
+ i += 1 ;
256
+ }
257
+ set . insert (c );
258
+ set . len ()
259
+ })
260
+ . max ()
261
+ . unwrap_or (0 ) as i32
265
262
}
266
263
}
267
264
```
Original file line number Diff line number Diff line change @@ -227,23 +227,20 @@ use std::collections::HashSet;
227
227
228
228
impl Solution {
229
229
pub fn length_of_longest_substring (s : String ) -> i32 {
230
- let n = s . len ();
231
- let cs : Vec <char > = s . chars (). collect ();
230
+ let s = s . as_bytes ();
232
231
let mut set = HashSet :: new ();
233
- let mut l = 0 ;
234
- let mut r = 0 ;
235
- let mut res = 0 ;
236
- while r != n {
237
- let k = cs [r ];
238
- while set . contains (& k ) {
239
- set . remove (& cs [l ]);
240
- l += 1 ;
241
- }
242
- set . insert (k );
243
- res = res . max (set . len ());
244
- r += 1 ;
245
- }
246
- res as i32
232
+ let mut i = 0 ;
233
+ s . iter ()
234
+ . map (| c | {
235
+ while set . contains (& c ) {
236
+ set . remove (& s [i ]);
237
+ i += 1 ;
238
+ }
239
+ set . insert (c );
240
+ set . len ()
241
+ })
242
+ . max ()
243
+ . unwrap_or (0 ) as i32
247
244
}
248
245
}
249
246
```
Original file line number Diff line number Diff line change @@ -2,22 +2,19 @@ use std::collections::HashSet;
2
2
3
3
impl Solution {
4
4
pub fn length_of_longest_substring ( s : String ) -> i32 {
5
- let n = s. len ( ) ;
6
- let cs: Vec < char > = s. chars ( ) . collect ( ) ;
5
+ let s = s. as_bytes ( ) ;
7
6
let mut set = HashSet :: new ( ) ;
8
- let mut l = 0 ;
9
- let mut r = 0 ;
10
- let mut res = 0 ;
11
- while r != n {
12
- let k = cs[ r] ;
13
- while set. contains ( & k) {
14
- set. remove ( & cs[ l] ) ;
15
- l += 1 ;
16
- }
17
- set. insert ( k) ;
18
- res = res. max ( set. len ( ) ) ;
19
- r += 1 ;
20
- }
21
- res as i32
7
+ let mut i = 0 ;
8
+ s. iter ( )
9
+ . map ( |c| {
10
+ while set. contains ( & c) {
11
+ set. remove ( & s[ i] ) ;
12
+ i += 1 ;
13
+ }
14
+ set. insert ( c) ;
15
+ set. len ( )
16
+ } )
17
+ . max ( )
18
+ . unwrap_or ( 0 ) as i32
22
19
}
23
20
}
You can’t perform that action at this time.
0 commit comments