文章目录
- 题目描述
- 题解思路
- 题解代码
- 题目链接
题目描述
题解思路
我们需要记录当前子串的开始下标,一个哈希表记录字符和遍历过程中最后一次出现的索引
遍历字符串,如果在当前字符在哈希表中有记录,并且索引下标大于当前子串的开始下标,表示出现重复字符,则将开始下标右移为当前字符索引下标
将当前字符及索引刷新到哈希表中,刷新无重复子串最大长度
题解代码
use std::collections::HashMap;
impl Solution {
pub fn length_of_longest_substring(s: String) -> i32 {
let mut win: HashMap<char, usize> = HashMap::new();
let mut ans = 0;
let mut start = -1;
for (i, c) in s.chars().enumerate() {
if let Some(idx) = win.get(&c) {
if *idx as i32 > start {
start = *idx as i32;
}
}
win.insert(c, i);
ans = ans.max(i as i32 - start);
}
ans
}
}
题目链接
https://leetcode.cn/problems/longest-substring-without-repeating-characters/