当前位置:网站首页>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;
}
};
类似题目
边栏推荐
猜你喜欢
直播预告|从新手村到魔王城,高效默契的敏捷团队如何炼成
分类常用的神经网络模型,深度神经网络主要模型
Mastodon:可创建类似推特的开源社交网络服务器
电力系统潮流计算(牛顿-拉夫逊法、高斯-赛德尔法、快速解耦法)【6节点 9节点 14节点 26节点 30节点 57节点】(Matlab代码实现)
Embedded Development: Embedded Basics - Mapping Peripherals Using Arrays of Pointers
超宽带uwb精准定位,厘米级室内定位技术,实时高精度方案应用
分享几个自动化测试的练手项目
【Windows】将排除项添加到安全中心以避免exe被系统自动删除
视频转成gif动图怎么操作?仅需三步在线完成视频转gif
一张图快速了解 Istio 的 EnvoyFilter
随机推荐
使用Jedis连接linux上的redis
C专家编程 第10章 再论指针 10.4 向函数传递一个一维数组
家电巨头,不碰儿童生意
[FreeRTOS] 13 Dynamic Memory Management
PNG如何变gif?教你一招png秒变gif动图的方法
requests库访问接口
找到一个超级神奇,百试百灵的解决 ModuleNotFoundError: No module named xxx 的方法
Etcd Kubernetes 集群稳定性:LIST 请求源码分析、性能评估与大规模基础服务部署调优
易基因|深度综述:m6A RNA甲基化在大脑发育和疾病中的表观转录调控作用
babylonjs shader
软件工程基础知识--需求分析
FTXUI基础笔记(hello world)
不同主机收不到组播消息原因分析
v-show指令:切换元素的显示与隐藏
分类常用的神经网络模型,深度神经网络主要模型
LeetCode-2. Add Two Numbers
The sword refers to OfferⅡ 045. The bottommost leftmost value of the binary tree dfs
本地导入不报错,服务器端报错 No module named xxx
glut库更新旧程序无法完成编译问题描述
C专家编程 第10章 再论指针 10.7 使用指针创建和使用动态数组