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

难度:中等

给定一个字符串 s ,找出 至多 包含 k 个不同字符的最长子串 T

示例 1:

输入: s = "eceba", k = 2
输出: 3
解释: 则 T 为 "ece",所以长度为 3。

示例 2:

输入: s = "aa", k = 1
输出: 2
解释: 则 T 为 "aa",所以长度为 2。

解答:

class Solution {//滑动窗口+哈希表//时间复杂度O(N)。空间复杂度O(K)//时间消耗在了查找最小值public int lengthOfLongestSubstringKDistinct(String s, int k) {int end = s.length();if(end * k == 0) return 0;int left = 0;int right = 0;int ansMax = 1;Map<Character, Integer> map = new HashMap<>();while(right < end){map.put(s.charAt(right), right++);if(map.size() == k + 1){//核心代码int del_index = Collections.min(map.values());map.remove(s.charAt(del_index));left = del_index + 1;}ansMax = Math.max(ansMax, right - left);}return ansMax;}
}class Solution {//滑动窗口+有序字典//时间复杂度O(N)。空间复杂度O(K)public int lengthOfLongestSubstringKDistinct(String s, int k) {int end = s.length();if(end * k == 0) return 0;int left = 0;int right = 0;int ansMax = 1;LinkedHashMap<Character, Integer> map = new LinkedHashMap<>(k + 1);while(right < end){Character ch = s.charAt(right);if(map.containsKey(ch)) map.remove(ch);map.put(s.charAt(right), right++);if(map.size() == k + 1){//核心代码Map.Entry<Character, Integer> leftMost = map.entrySet().iterator().next();map.remove(leftMost.getKey());left = leftMost.getValue() + 1;}ansMax = Math.max(ansMax, right - left);}return ansMax;}
}class Solution {//滑动窗口+数组//时间复杂度O(N)。空间复杂度O(128)public int lengthOfLongestSubstringKDistinct(String s, int k) {int[] arr = new int[128];int cnt = 0, left = 0, right = 0, ans = 0;while(right < s.length()) {if (arr[s.charAt(right)] == 0) {cnt++;}arr[s.charAt(right++)]++;while(cnt > k) {arr[s.charAt(left)]--;if(arr[s.charAt(left)] == 0) {cnt--;}left++;}ans = Math.max(ans, right - left);}return ans;}
}

参考自:

作者:LeetCode-Solution
链接:https://leetcode-cn.com/problems/longest-substring-with-at-most-k-distinct-characters/solution/zhi-shao-bao-han-k-ge-bu-tong-zi-fu-de-zui-chang-z/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

340. 至多包含K个不同字符的最长子串相关推荐

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

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

  2. LeetCode算法日记:340.至多包含K个不同字符的最长子串

    340.至多包含K个不同字符的最长子串 日期:2022/7/30 题目描述:给定一个字符串 *s* ,找出 至多 包含 k 个不同字符的最长子串 *T*. 示例: 输入: s = "eceb ...

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

    340. 至多包含 K 个不同字符的最长子串 class Solution {public int lengthOfLongestSubstringKDistinct(String ss, int 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. leetcode340. 至多包含 K 个不同字符的最长子串

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

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

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

最新文章

  1. 基于php留言本毕业设计,基于PHP校园学生论坛留言本设计与实现(MySQL)(含录像)
  2. JAVA实例,判断是否是瑞年
  3. 悦虎144固件,华强北二代悦虎144固件,1562M芯片144固件
  4. Node.js 应用故障排查手册 —— 正确打开 Chrome devtools
  5. oracle 表改表空间,Oracle批量修改用户表table的表空间
  6. 基于centos6.5搭建redis伪分布式主备节点
  7. 【ABAP系列】SAP ABAP SY-SUBRC的含义解析
  8. C语言中可变参数的宏 __VA_ARGS__
  9. Unix操作系统的原理、优点与缺点
  10. 几种常见的模式识别算法整理和总结
  11. win10下实现bat转exe
  12. LOL云顶弈记牌易语言源码
  13. dos批处理脚本自动添加网络共享打印机-简单版且亲测可用
  14. IOS13以上抓https包,基于win7+Fiddler,操作记录
  15. mysql 裸设备_MySQL使用裸设备存储
  16. python68个内置函数_新手入门!68个Python内置函数建议收藏学习
  17. 工作20天之感悟(嵌入式开发)
  18. 一张图帮你看懂 iPhone 6 Plus 的屏幕分辨率
  19. 18c和12客户端 oracle,客户端连接 12、18c 报ORA-28040和ORA-01017 的解决方法
  20. association weak 属性

热门文章

  1. Python 视频转换为图片 与 图片转换为视频
  2. 探索学习:网红容器引擎Docker
  3. Leetcode 题解-59题
  4. Dynaper - Dynamic Wallpapers for mac(动态壁纸制作工具) v1.5激活版
  5. 《OverFeat: Integrated Recognition, Localization and Detection using Convolutional Networks》翻译
  6. 百度携手重庆渝中区,打造区块链大数据智能化应用示范城区
  7. 主动降噪耳机什么牌子好?热门降噪耳机排行榜
  8. 网站丨这四个网站好像有点好玩
  9. 虚拟化技术 - 概览 [一]
  10. fidder配合夜神模拟器进行抓包