Rust 力扣 - 3090. 每个字符最多出现两次的最长子字符串

文章目录

题目描述

题解思路

本题使用滑动窗口进行求解,使用左指针和右指针分别表示窗口的左边界和窗口的右边界,使用哈希表记录窗口内的字符及其对应数量

我们首先向右移动右指针,将字符加入到哈希表中进行计数,如果当前加入的字符在窗口中超过3个,则右移左指针从窗口中移除元素,直到左指针把当前字符从窗口中移除一个

在移动过程中记录窗口长度的最大值,窗口长度的最大值即为本题结果

题解代码

rust 复制代码
use std::collections::HashMap;

impl Solution {
    pub fn maximum_length_substring(s: String) -> i32 {
        let s = s.as_bytes();

        let mut map = HashMap::new();

        let mut ans = 0;

        let mut left  = 0;

        for i in 0..s.len() {
            if let Some(j) = map.get(&(s[i])) {
                if *j == 2 {
                    while s[left] != s[i] {
                        if let Some(k) = map.get_mut(&s[left]) {
                            *k -= 1;
                        }

                        left += 1;
                    }
                    left += 1;

                    continue;
                } else {
                    map.insert(s[i], j + 1);
                }
            } else {
                map.insert(s[i], 1);
            }

            ans = ans.max(i - left + 1);
        }

        ans as i32
    }
}

题目链接

https://leetcode.cn/problems/maximum-length-substring-with-two-occurrences/

相关推荐
信奥卷王3 分钟前
2025年9月GESPC++三级真题解析(含视频)
开发语言·c++·算法
努力学习的小廉4 分钟前
我爱学算法之—— BFS之FLoodFill算法
算法·宽度优先
喵了几个咪19 分钟前
Golang微服务框架kratos实现Socket.IO服务
开发语言·微服务·golang
q***420521 分钟前
PHP使用Redis实战实录2:Redis扩展方法和PHP连接Redis的多种方案
开发语言·redis·php
天选之女wow27 分钟前
【Hard——Day8】65.有效数字、68.文本左右对齐、76.最小覆盖子串
linux·运维·redis·算法·leetcode
AI大模型学徒37 分钟前
NLP基础(八)_马尔可夫模型
算法·机器学习·自然语言处理·nlp·概率论·马尔可夫模型
昵称为空C44 分钟前
kafka的替代品redpanda部署与SpringBoot集成使用案例
spring boot·后端·kafka
前端小L1 小时前
图论专题(十八):“逆向”拓扑排序——寻找图中的「最终安全状态」
数据结构·算法·安全·深度优先·图论·宽度优先
前端小L1 小时前
图论专题(十七):从“判定”到“构造”——生成一份完美的「课程表 II」
算法·矩阵·深度优先·图论·宽度优先
qq_433554541 小时前
C++ 稀疏表
开发语言·c++·算法