From 523922b82616aebba0962a1cec5b685907208c8d Mon Sep 17 00:00:00 2001 From: crupest Date: Fri, 20 Sep 2019 20:28:55 +0800 Subject: import(solutions): Optimize p3. --- works/solutions/src/length_of_longest_substring.rs | 32 ++++++++++------------ 1 file changed, 15 insertions(+), 17 deletions(-) (limited to 'works/solutions/src') diff --git a/works/solutions/src/length_of_longest_substring.rs b/works/solutions/src/length_of_longest_substring.rs index cebcc72..cbd5e14 100644 --- a/works/solutions/src/length_of_longest_substring.rs +++ b/works/solutions/src/length_of_longest_substring.rs @@ -1,29 +1,27 @@ use super::Solution; -use std::collections::HashMap; - impl Solution { pub fn length_of_longest_substring(s: String) -> i32 { - let mut map = HashMap::new(); - let mut last_index = 0; - let mut result = 0; + let mut map: [i32; std::u8::MAX as usize] = [-1; std::u8::MAX as usize]; + let mut last_index: i32 = 0; + let mut result: i32 = 0; let bytes = s.as_bytes(); for (i, c) in bytes.iter().enumerate() { - match map.get(&c) { - Some(vi) if *vi >= last_index => { - last_index = *vi + 1; - map.insert(c, i); - } - _ => { - map.insert(c, i); - let length = i - last_index + 1; - if length > result { - result = length; - } + let i = i as i32; + let c = *c as usize; + let li = map[c]; + if li >= last_index { + last_index = li + 1; + map[c] = i; + } else { + map[c] = i; + let length = i - last_index + 1; + if length > result { + result = length; } } } - result as i32 + result } } -- cgit v1.2.3