无重复字符的最长子串 - Rust

image.png

题目解析
采用滑动窗口。

pub fn length_of_longest_substring(s: String) -> i32 {
    use std::collections::HashMap;
    
    if s.len() == 0{
        return 0 ;
    }
    let mut map = HashMap::with_capacity(s.len());
    let s = s.chars().collect::<Vec<_>>();
    let mut max = 0;
    let mut left = 0;

    s.iter().enumerate().for_each(|(index,char)|{
        if let Some(last) = map.get(char) {
            left = std::cmp::max(left, *last);
        }
        max = std::cmp::max(max, index - left + 1);
        map.insert(*char, index + 1);
    });
 
    max as i32
}


#[cfg(test)]
mod tests {
    #[test]
    fn length_of_longest_substring_test() {
        use super::length_of_longest_substring;

        let s = String::from("afebcfefx");
        assert_eq!(5, length_of_longest_substring(s));
    }
}

复杂度分析
空间复杂度: O(n)。
时间复杂度: O(n)。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容