当前位置:网站首页>leetcode:340.至多包含K个不同字符的最长子串
leetcode:340.至多包含K个不同字符的最长子串
2022-08-10 16:39:00 【OceanStar的学习笔记】
题目来源
题目描述
题目描述:给定一个字符串 s ,找出 至多 包含 k 个不同字符的最长子串 T。
示例 1:
输入: s = “eceba”, k = 2
输出: 3
解释: 则 T 为 “ece”,所以长度为 3。
示例 2:
输入: s = “aa”, k = 1
输出: 2
解释: 则 T 为 “aa”,所以长度为 2。
class Solution {
public:
int lengthOfLongestSubstringKDistinct(string s, int k) {
std::map<char, int> map;
int left = 0, right =
}
};
题目解析
因为本题具有单调性(指针向前,种类不可能减少),所以可以用滑动窗口来做
实现
哈希表,key是字符,value是窗口内字符出现的次数。
所以m.size()就是窗口内出现的字符种类个数
class Solution {
public:
int lengthOfLongestSubstringKDistinct(string s, int k) {
int ans = 0, left = 0;
std::unordered_map<char, int> m;
for (int i = 0; i < s.size(); ++i) {
++m[s[i]];
while (m.size() > k){
if(--m[s.size()] == 0){
m.erase(s[left]);
}
++left;
}
ans = std::max(ans, i - left + 1);
}
return ans;
}
};
实现
class Solution {
public:
int lengthOfLongestSubstringKDistinct(string s, int k) {
if(k == 0){
return 0;
}
int ans = 0;
int N = s.size();
std::vector<int> count(256);
int diff = 0;
int R = 0;
for (int i = 0; i < N; ++i) {
// R 窗口的右边界
while (R < N && (diff < k || (diff == k && count[s[R]] > 0))) {
//窗口内字符种类<k个 || 窗口内字符种类==k个&&边界字符之前出现过
diff += count[s[R]] == 0 ? 1 : 0;
count[s[R++]]++;
}
// R 来到违规的第一个位置
ans = std::max(ans, R - i);
diff -= count[s[i]] == 1 ? 1 : 0;
count[s[i]]--;
}
return ans;
}
};
类似题目
边栏推荐
- 不爱生活的段子手不是好设计师|ONES 人物
- 怎么学自动化测试
- 2022 CCF China Open Source Conference Notice (Fourth Round)
- 视频转gif怎样操作?1分钟在线视频转gif制作
- 电力系统潮流计算与PowerWorld仿真(牛顿拉夫逊法和高斯赛德尔法)(Matlab实现)
- Andorid源码编译需要掌握的shell语法(三)
- router.afterEach()
- C专家编程 第10章 再论指针 10.5 使用指针向函数传递一个多维数组
- Taurus.MVC WebAPI 入门开发教程4:控制器方法及参数定义、获取及基础校验属性【Require】。
- 重庆新壹汽与一汽集团达成新能源项目战略合作,赋能“碳中和”创造“碳财富”
猜你喜欢

李斌带不动的长安新能源高端梦,华为和“宁王”能救吗?

植物肉,为何在中国没法“真香”?

电力系统潮流【牛顿-拉夫逊法】(4节点、5节点、6节点、9节点)(Matlab代码实现)

Annual salary of 600,000+?This 100,000-word interview assault book covers all technology stacks from Ali P5 engineers to P7

一文带你拿下信号卷积—常见信号卷积

leetcode:1137. 第 N 个泰波那契数

家电巨头,不碰儿童生意

Knox 代理各类组件

视频转gif怎样操作?1分钟在线视频转gif制作

【荣耀智慧服务】快捷服务开发指南
随机推荐
【Windows】将排除项添加到安全中心以避免exe被系统自动删除
How to generate code using the Swift Package plugin
TradingView_学习笔记
HTTP学习——协议与术语、HTTP、缓存、Cookie
自助服务知识库是什么?
String compression (3) short string compression
App自动化测试框架设计与实现
视频转gif怎样操作?1分钟在线视频转gif制作
Go+:首个顺应 “三位一体” 发展潮流的编程语言
如何修改gif图片尺寸?教你一键裁剪gif尺寸
cube-studio配置镜像仓库并允许
数据库注入提权总结(二)
requests库访问接口
v-bind指令:设置元素的属性
积分可以当钱用,阿里推出个人「碳账户」
生成树协议(STP---Spanning Tree Protocol)
需求骤降,成本激增,PC行业再次入冬
Gif动图如何快速制作?教你1分钟图片合成gif的方法
Etcd Kubernetes 集群稳定性:LIST 请求源码分析、性能评估与大规模基础服务部署调优
C语言按位运算符如何使用