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/

相关推荐
iOS开发上架哦13 小时前
Swift中对象实例方法名混淆问题详细解决方法
后端
零日失眠者13 小时前
【文件管理系列】003:重复文件查找工具
后端·python
CoderYanger13 小时前
C.滑动窗口-越短越合法/求最长/最大——2958. 最多 K 个重复元素的最长子数组
java·数据结构·算法·leetcode·哈希算法·1024程序员节
哈哈哈笑什么13 小时前
多级缓存框架(Redis + Caffeine)完整指南
redis·后端
哈哈哈笑什么13 小时前
分布式事务实战:订单服务 + 库存服务(基于本地消息表组件)
分布式·后端·rabbitmq
溪饱鱼13 小时前
NextJs + Cloudflare Worker 是出海最佳实践
前端·后端
哈哈哈笑什么13 小时前
完整分布式事务解决方案(本地消息表 + RabbitMQ)
分布式·后端·rabbitmq
小周在成长13 小时前
Java 抽象类 vs 接口:相同点与不同点
后端
expect7g13 小时前
Paimon Branch --- 流批一体化之二
大数据·后端·flink
幌才_loong13 小时前
.NET 8 实时推送魔法:SSE 让数据 “主动跑” 到客户端
后端