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个不同字符的最长子串相关推荐

  1. LeetCode 340. 至多包含 K 个不同字符的最长子串

    340. 至多包含 K 个不同字符的最长子串 class Solution {public int lengthOfLongestSubstringKDistinct(String s, int k) ...

  2. LeetCode 340. 至多包含 K 个不同字符的最长子串 (滑动窗口)

    340. 至多包含 K 个不同字符的最长子串 class Solution {public int lengthOfLongestSubstringKDistinct(String ss, int k ...

  3. 340. 至多包含K个不同字符的最长子串

    340. 至多包含 K 个不同字符的最长子串 难度:中等 给定一个字符串 s ,找出 至多 包含 k 个不同字符的最长子串 T. 示例 1: 输入: s = "eceba", k ...

  4. LeetCode 340. 至多包含 K 个不同字符的最长子串(滑动窗口)

    文章目录 1. 题目 2. 解题 1. 题目 给定一个字符串 s ,找出 至多 包含 k 个不同字符的最长子串 T. 示例 1: 输入: s = "eceba", k = 2 输出 ...

  5. leetcode——340.至多包含 K 个不同字符的最长子串

    题目--对不同字符个数进行k的限定 思路 利用双指针实现滑动窗口 滑动窗口对不同字母进行计数 移动右指针 当不同字符个数大于k 移动左指针 如何统计不同字符的个数?--哈希表的size 当出现次数为0 ...

  6. 【LeetCode430】至多包含 K 个不同字符的最长子串

    340. 至多包含 K 个不同字符的最长子串 难度困难91收藏分享切换为英文接收动态反馈 给定一个字符串 s ,找出 至多 包含 k 个不同字符的最长子串 T. 示例 1: 输入: s = " ...

  7. 滑动窗口—至多包含 K 个不同字符的最长子串(leetcode 340)

    题目描述 给定一个字符串 s ,找出 至多 包含 k 个不同字符的最长子串 T. 示例 1: 输入: s = "eceba", k = 2 输出: 3 解释: 则 T 为 &quo ...

  8. Leetcode——至多包含K个不同字符的最长子串

    1. 至多包含两个不同字符的最长子串 (1)滑动窗口 动态地维护一个滑动窗口,如果检测到窗口内出现了超过两个不同的字符,则将窗口整体右移一格. 否则,将滑动窗口向右扩张一格. 最后返回滑动窗口的长度 ...

  9. leetcode340. 至多包含 K 个不同字符的最长子串

    给定一个字符串 s ,找出 至多 包含 k 个不同字符的最长子串 T. 示例 1: 输入: s = "eceba", k = 2 输出: 3 解释: 则 T 为 "ece ...

最新文章

  1. DNS服务,A记录,URL转发,MX记录,NS记录,CNAME记录,解释与设置教
  2. 软件测试领域的中心化与去中心化
  3. Java反射之将对象转成map
  4. 有两个地方,用到了javabean对象和属性字符串值之间的转换
  5. 网上读书关于软件测试,【读书笔记】之软件测试
  6. 对HttpClient的理解
  7. bazel 链接第三方动态库_C/C++编程知识:Linux 动态库相关知识整理
  8. 跨域 No 'Access-Control-Allow-Origin' header is present on the requested resource
  9. 下载VS2017的网址
  10. 学生账号部署XAP程序,在Lumia手机上
  11. java使用hdf.jar_在HDFView 2.14上查看使用h5py编写的大(12.5GB)HDF5文件
  12. 步进电机 步进电机驱动器
  13. Manjaro 安装搜狗输入法
  14. 关于自抗扰控制的一些中文论文
  15. mysql 2037年_Correct way to store MySQL date after year 2037
  16. js递归遍历树形json数据
  17. 新版edge浏览器换主题皮肤,使用Chrome浏览器的主题皮肤
  18. 【A Neural Algorithm of Artistic Style】 Pics
  19. USNEWS美国大学计算机工程,想从事编程?2019年USNews美国大学计算机工程专业排名值得一看...
  20. jQuery学习-基本使用

热门文章

  1. 什么是回归问题和分类问题?机器学习知识点
  2. 梯度下降法 python_(四)梯度下降法及其python实现
  3. Sentence Accumulation
  4. win7美化_极致美化 | 我们如何把 Windows「改造」成 mac OS
  5. android openCV检测图像的基本特征,包括Canny边缘检测、Harris角点检测、霍夫直线检测-基于Android studio
  6. linux下添加JAVA_HOME环境变量
  7. 新版MinGW-w64(12.2.0)安装
  8. autocad2014点击保存闪退_windows10下AutoCAD 2014打开出现闪退怎么办
  9. 2022 百度面试题
  10. Angular 入门教程系列:39:使用ng-alain进行开发