use std::collections::HashSet; fn main() { let s = "dvdf".to_string(); dbg!(Solution::length_of_longest_substring(s)); } struct Solution(()); impl Solution { pub fn length_of_longest_substring(s: String) -> i32 { use std::collections::HashMap; let s = s.chars().collect::>(); let mut max_length = 0; let mut length = 0; let mut map: HashMap = HashMap::new(); let mut idx = 0; while idx < s.len() { let ch = &s[idx]; if let Some(ref ci) = map.remove(ch) { map = HashMap::new(); if max_length < length { max_length = length; } idx = (ci + 1) as usize; length = 0; continue; } map.insert(ch.clone(), idx as i32); length += 1; idx += 1; } if length > max_length { max_length = length; } max_length } }