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
#![allow(clippy::needless_range_loop)]
use std::collections::HashMap;
pub struct Solution;
#[allow(unused)]
impl Solution {
pub fn length_of_longest_substring(s: String) -> i32 {
let mut ans = 0;
let mut dict = HashMap::new();
let len = s.len();
let v = s.chars().collect::<Vec<char>>();
let mut j = -1;
for i in 0..len {
if dict.contains_key(&v[i]) {
j = (*dict.get(&v[i]).unwrap() as i32).max(j)
}
dict.insert(v[i], i);
ans = ans.max(i as i32 - j);
}
ans
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test() {
assert_eq!(Solution::length_of_longest_substring("abcabcbb".to_string()), 3);
assert_eq!(Solution::length_of_longest_substring("bbbbb".to_string()), 1);
assert_eq!(Solution::length_of_longest_substring("pwwkew".to_string()), 3);
assert_eq!(Solution::length_of_longest_substring("".to_string()), 0);
assert_eq!(Solution::length_of_longest_substring("au".to_string()), 2);
assert_eq!(Solution::length_of_longest_substring("dvdf".to_string()), 3);
assert_eq!(Solution::length_of_longest_substring("abba".to_string()), 2);
assert_eq!(Solution::length_of_longest_substring("aab".to_string()), 2);
assert_eq!(Solution::length_of_longest_substring("abcabcbb".to_string()), 3);
assert_eq!(Solution::length_of_longest_substring("bbbbb".to_string()), 1);
assert_eq!(Solution::length_of_longest_substring("pwwkew".to_string()), 3);
assert_eq!(Solution::length_of_longest_substring("".to_string()), 0);
assert_eq!(Solution::length_of_longest_substring("au".to_string()), 2);
assert_eq!(Solution::length_of_longest_substring("dvdf".to_string()), 3);
assert_eq!(Solution::length_of_longest_substring("abba".to_string()), 2);
assert_eq!(Solution::length_of_longest_substring("aab".to_string()), 2);
assert_eq!(Solution::length_of_longest_substring("abcabcbb".to_string()), 3);
}
}