滑窗解决问题

  • 没有重复的最大字串是在出现第二个和首字符相同的字符的情况之下出现断开
    而这种情况之下可以选择使用滑块方法解决:
    1. 第k个字符作为起始位置,到rk结束
    2. 第k+1个字符开始,到rk的时候,此时是不重复的,所以可以将rk值进行增大,直到和k+1个字符相等。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
use std::collections::HashSet;

impl Solution {
pub fn length_of_longest_substring(s: String) -> i32 {
let mut occ: HashSet<char> = HashSet::new();
let cv: Vec<char> = s.chars().collect();
let n = s.len();

let mut rk = 0;
let mut ans = 0;
for i in 0..n{
if i != 0 {
occ.remove(&cv[i-1]);
}
while rk < n && !occ.contains(&cv[rk]) {
occ.insert(cv[rk]);
rk += 1;
}
ans = ans.max(rk - i);
}
ans as i32
}
}