当前位置:网站首页>leetcode:159.最多有两个不同字符的最长子串
leetcode:159.最多有两个不同字符的最长子串
2022-08-10 16:39:00 【OceanStar的学习笔记】
题目来源
题目描述
给定一个字符串 s ,找出 至多 包含两个不同字符的最长子串 t ,并返回该子串的长度。
示例 1:
输入: “eceba”
输出: 3
解释: t 是 “ece”,长度为3。
示例 2:
输入: “ccaabbb”
输出: 5
解释: t 是 “aabbb”,长度为5。
class Solution {
public:
int lengthOfLongestSubstringTwoDistinct(string s) {
}
};
题目解析
思路
- 用一个map,key为字符,value为字符出现次数。
- 如果map的映射数量超过2个的时候,就删除一个映射
- 比如此时 HashMap 中e有2个,c有1个,此时把b也存入了 HashMap,那么就有三对映射了
- 这时 left 是0,先从e开始,映射值减1,此时e还有1个,不删除,left 自增1
- 这时 HashMap 里还有三对映射,此时 left 是1,那么到c了,映射值减1,此时e映射为0,将e从 HashMap 中删除,left 自增1
- 然后更新结果为 i - left + 1,以此类推直至遍历完整个字符串
class Solution {
public:
int lengthOfLongestSubstringTwoDistinct(string s) {
int res = 0, left = 0;
unordered_map<char, int> m;
for (int i = 0; i < s.size(); ++i) {
++m[s[i]];
while (m.size() > 2) {
if (--m[s[left]] == 0) m.erase(s[left]);
++left;
}
res = max(res, i - left + 1);
}
return res;
}
};
思路
- 用一个map,key为字符,value为字符最新的坐标
- 比如题目中的例子 “eceba”,遇到第一个e,映射其坐标0,遇到c,映射其坐标1,遇到第二个e时,映射其坐标2,当遇到b时,映射其坐标3
- 如果map的映射数量超过2个的时候,就删除一个映射
- 从left开始往右找,看每个字符在map中的映射值是否等于当前left()
- 比如第一个e,HashMap 此时映射值为2,不等于 left 的0,那么 left 自增1,遇到c的时候,HashMap 中c的映射值是1,和此时的 left 相同,那么我们把c删掉,left 自增1,再更新结果
class Solution {
public:
int lengthOfLongestSubstringTwoDistinct(string s) {
int res = 0, left = 0;
unordered_map<char, int> m;
for (int i = 0; i < s.size(); ++i) {
m[s[i]] = i;
while (m.size() > 2) {
if (m[s[left]] == left) m.erase(s[left]);
++left;
}
res = max(res, i - left + 1);
}
return res;
}
};
类似题目
边栏推荐
猜你喜欢
网易云信亮相LiveVideoStackCon2022,解构基于WebRTC的开源低延时播放器实践
生成树协议(STP---Spanning Tree Protocol)
C专家编程 第10章 再论指针 10.3 在锯齿状数组上使用指针
神经网络全连接层的作用,各种神经网络的优缺点
LabView---双通道示波器(内含信号发生器)
Etcd Kubernetes 集群稳定性:LIST 请求源码分析、性能评估与大规模基础服务部署调优
电力系统潮流【牛顿-拉夫逊法】(4节点、5节点、6节点、9节点)(Matlab代码实现)
电力系统潮流计算(牛顿-拉夫逊法、高斯-赛德尔法、快速解耦法)【6节点 9节点 14节点 26节点 30节点 57节点】(Matlab代码实现)
分享几个自动化测试的练手项目
ahx文件转mav文件 工具分享及说明
随机推荐
Bitwarden:免费、开源的密码管理服务
MySQL数据库命令
接口测试中,应不应该用数据库
Polling and the principle of webSocket and socket.io
需求骤降,成本激增,PC行业再次入冬
LeetCode-876. Middle of the Linked List
LeetCode-692. Top K Frequent Words
注解和反射、持续
promise笔记(四)
电力系统潮流计算(牛顿-拉夫逊法、高斯-赛德尔法、快速解耦法)【6节点 9节点 14节点 26节点 30节点 57节点】(Matlab代码实现)
电力系统潮流【牛顿-拉夫逊法】(4节点、5节点、6节点、9节点)(Matlab代码实现)
FTXUI基础笔记(hello world)
Gif动图怎么用视频做?一键在线完成视频转gif制作
如何搭建知识库,让您的内容更丰富?
LeetCode-922. Sort Array By Parity II
v-model指令:获取和设置表单元素的值
Meaning of CDF graph
【科研】常见火灾数据集
docker中安装mysql
Gif动图如何快速制作?教你1分钟图片合成gif的方法