问题描述
这类问题, 可以优先考虑使用滑动窗口, 因为要找最长无重复的子串, 可以在窗口内维护那个子串,
然后将窗口右侧向右移, 如果条件不满足, 就把窗口左侧边界向右移, 直到满足条件为止.
代码实现:
#![allow(unused)]
fn main() {
use std::collections::HashMap;
pub fn length_of_longest_substring2(s: String) -> i32 {
let mut map = HashMap::<u8, usize>::new();
let bytes = s.as_bytes();
let mut substring_max_len = 0;
let mut left = 0;
let mut right = 0;
while right < bytes.len() {
if let Some(&index) = map.get(&bytes[right]) {
while left <= index {
map.remove(&bytes[left]);
left += 1;
}
}
map.insert(bytes[right], right);
right += 1;
substring_max_len = substring_max_len.max(map.len());
}
substring_max_len as i32
}
}