diff options
author | crupest <crupest@outlook.com> | 2019-09-20 20:28:55 +0800 |
---|---|---|
committer | crupest <crupest@outlook.com> | 2019-09-20 20:28:55 +0800 |
commit | 523922b82616aebba0962a1cec5b685907208c8d (patch) | |
tree | adedfab603510115eaaf59954a8f9402cf0ae8d2 | |
parent | e13ad0afae5124efec3b522ebc04062ee06464c8 (diff) | |
download | crupest-523922b82616aebba0962a1cec5b685907208c8d.tar.gz crupest-523922b82616aebba0962a1cec5b685907208c8d.tar.bz2 crupest-523922b82616aebba0962a1cec5b685907208c8d.zip |
import(solutions): Optimize p3.
-rw-r--r-- | works/solutions/src/length_of_longest_substring.rs | 32 |
1 files changed, 15 insertions, 17 deletions
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
}
}
|