LeetCode算法日记:340.至多包含K个不同字符的最长子串
340.至多包含K个不同字符的最长子串
日期:2022/7/30
题目描述:给定一个字符串 *s
* ,找出 至多 包含 k
个不同字符的最长子串 *T*。
示例:
输入: s = "eceba", k = 2
输出: 3
解释: 则 T 为 "ece",所以长度为 3。输入: s = "aa", k = 1
输出: 2
解释: 则 T 为 "aa",所以长度为 2。
思路:
双指针+哈希表
代码+解析:
class Solution {
public:int lengthOfLongestSubstringKDistinct(string s, int k) {if(k == 0) return 0; //k=0的话自然没有符合条件的子串if(s.size() == 1) return 1; //已经排除了k=0的情况,那么不管k等于多少长度都只有1map<char,int> match; //哈希表int len = 0; //长度int kind = 0; //不同字符的个数int maxLen = 0; //最大长度,最终返回的是这个int start = 0,end = 0; //双指针while(end<s.size()){if(start == end){match[s[start]] ++; //该字母的个数++len++; kind++; end++; //右指针往右移动}if(match[s[end]] == 0 && kind == k) //遇到一个新的字符,且超出了k的限度,调整start{maxLen = max(len,maxLen); //保存目前的lenmatch[s[start]] --; //该字母的个数--len--; //长度--if(match[s[start]] == 0)kind--; //不同字符的个数--start++; //左指针往右移动}else //没到限度,调整end{if(match[s[end]] == 0)kind++; //遇到新字符match[s[end]]++;len++;end++;}maxLen = max(len,maxLen);}return maxLen;}
};
执行用时:16 ms, 在所有 C++ 提交中击败了40.24%的用户
内存消耗:6.8 MB, 在所有 C++ 提交中击败了77.98%的用户
通过测试用例:142 / 142
LeetCode算法日记:340.至多包含K个不同字符的最长子串相关推荐
- LeetCode 340. 至多包含 K 个不同字符的最长子串
340. 至多包含 K 个不同字符的最长子串 class Solution {public int lengthOfLongestSubstringKDistinct(String s, int k) ...
- LeetCode 340. 至多包含 K 个不同字符的最长子串 (滑动窗口)
340. 至多包含 K 个不同字符的最长子串 class Solution {public int lengthOfLongestSubstringKDistinct(String ss, int k ...
- 340. 至多包含K个不同字符的最长子串
340. 至多包含 K 个不同字符的最长子串 难度:中等 给定一个字符串 s ,找出 至多 包含 k 个不同字符的最长子串 T. 示例 1: 输入: s = "eceba", k ...
- LeetCode 340. 至多包含 K 个不同字符的最长子串(滑动窗口)
文章目录 1. 题目 2. 解题 1. 题目 给定一个字符串 s ,找出 至多 包含 k 个不同字符的最长子串 T. 示例 1: 输入: s = "eceba", k = 2 输出 ...
- leetcode——340.至多包含 K 个不同字符的最长子串
题目--对不同字符个数进行k的限定 思路 利用双指针实现滑动窗口 滑动窗口对不同字母进行计数 移动右指针 当不同字符个数大于k 移动左指针 如何统计不同字符的个数?--哈希表的size 当出现次数为0 ...
- 【LeetCode430】至多包含 K 个不同字符的最长子串
340. 至多包含 K 个不同字符的最长子串 难度困难91收藏分享切换为英文接收动态反馈 给定一个字符串 s ,找出 至多 包含 k 个不同字符的最长子串 T. 示例 1: 输入: s = " ...
- 滑动窗口—至多包含 K 个不同字符的最长子串(leetcode 340)
题目描述 给定一个字符串 s ,找出 至多 包含 k 个不同字符的最长子串 T. 示例 1: 输入: s = "eceba", k = 2 输出: 3 解释: 则 T 为 &quo ...
- Leetcode——至多包含K个不同字符的最长子串
1. 至多包含两个不同字符的最长子串 (1)滑动窗口 动态地维护一个滑动窗口,如果检测到窗口内出现了超过两个不同的字符,则将窗口整体右移一格. 否则,将滑动窗口向右扩张一格. 最后返回滑动窗口的长度 ...
- leetcode340. 至多包含 K 个不同字符的最长子串
给定一个字符串 s ,找出 至多 包含 k 个不同字符的最长子串 T. 示例 1: 输入: s = "eceba", k = 2 输出: 3 解释: 则 T 为 "ece ...
最新文章
- DNS服务,A记录,URL转发,MX记录,NS记录,CNAME记录,解释与设置教
- 软件测试领域的中心化与去中心化
- Java反射之将对象转成map
- 有两个地方,用到了javabean对象和属性字符串值之间的转换
- 网上读书关于软件测试,【读书笔记】之软件测试
- 对HttpClient的理解
- bazel 链接第三方动态库_C/C++编程知识:Linux 动态库相关知识整理
- 跨域 No 'Access-Control-Allow-Origin' header is present on the requested resource
- 下载VS2017的网址
- 学生账号部署XAP程序,在Lumia手机上
- java使用hdf.jar_在HDFView 2.14上查看使用h5py编写的大(12.5GB)HDF5文件
- 步进电机 步进电机驱动器
- Manjaro 安装搜狗输入法
- 关于自抗扰控制的一些中文论文
- mysql 2037年_Correct way to store MySQL date after year 2037
- js递归遍历树形json数据
- 新版edge浏览器换主题皮肤,使用Chrome浏览器的主题皮肤
- 【A Neural Algorithm of Artistic Style】 Pics
- USNEWS美国大学计算机工程,想从事编程?2019年USNews美国大学计算机工程专业排名值得一看...
- jQuery学习-基本使用
热门文章
- 什么是回归问题和分类问题?机器学习知识点
- 梯度下降法 python_(四)梯度下降法及其python实现
- Sentence Accumulation
- win7美化_极致美化 | 我们如何把 Windows「改造」成 mac OS
- android openCV检测图像的基本特征,包括Canny边缘检测、Harris角点检测、霍夫直线检测-基于Android studio
- linux下添加JAVA_HOME环境变量
- 新版MinGW-w64(12.2.0)安装
- autocad2014点击保存闪退_windows10下AutoCAD 2014打开出现闪退怎么办
- 2022 百度面试题
- Angular 入门教程系列:39:使用ng-alain进行开发