1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
#![allow(dead_code)]
pub fn length_of_longest_substring(s: String) -> i32 {
use std::collections::HashSet;
let mut set = HashSet::new();
let mut longest = 0;
let mut i = 0;
let mut j = 0;
let s = s.into_bytes();
while i < s.len() && j < s.len() {
if !set.contains(&s[j]) {
set.insert(s[j]);
j += 1;
longest = usize::max(longest, j - i);
} else {
set.remove(&s[i]);
i += 1;
}
}
longest as i32
}
pub fn length_of_longest_substring2(s: String) -> i32 {
use std::collections::HashMap;
let mut map = HashMap::new();
let mut longest = 0;
let mut i = 0;
let mut j = 0;
let s = s.into_bytes();
while j < s.len() {
if map.contains_key(&s[j]) {
i = usize::max(map[&s[j]], i);
}
longest = longest.max(j + 1 - i);
map.insert(s[j], j + 1);
j += 1;
}
longest as i32
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test1() {
assert_eq!(length_of_longest_substring(String::from("pwwkew")), 3);
}
#[test]
fn test2() {
assert_eq!(length_of_longest_substring2(String::from("pwwkew")), 3);
}
}