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