diff options
Diffstat (limited to '03_longest-substring-without-repeating-chars/src')
| -rw-r--r-- | 03_longest-substring-without-repeating-chars/src/main.rs | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/03_longest-substring-without-repeating-chars/src/main.rs b/03_longest-substring-without-repeating-chars/src/main.rs new file mode 100644 index 0000000..f07bedf --- /dev/null +++ b/03_longest-substring-without-repeating-chars/src/main.rs @@ -0,0 +1,46 @@ +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::<Vec<char>>(); + let mut max_length = 0; + let mut length = 0; + let mut map: HashMap<char, i32> = 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 + } +} |
