340. 至多包含K个不同字符的最长子串
340. 至多包含 K 个不同字符的最长子串
给定一个字符串 s ,找出 至多 包含 k 个不同字符的最长子串 T。
输入: s = "eceba", k = 2
输出: 3
解释: 则 T 为 "ece",所以长度为 3。
输入: 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;}
}
340. 至多包含K个不同字符的最长子串相关推荐
- LeetCode 340. 至多包含 K 个不同字符的最长子串
340. 至多包含 K 个不同字符的最长子串 class Solution {public int lengthOfLongestSubstringKDistinct(String s, int k) ...
- LeetCode算法日记:340.至多包含K个不同字符的最长子串
340.至多包含K个不同字符的最长子串 日期:2022/7/30 题目描述:给定一个字符串 *s* ,找出 至多 包含 k 个不同字符的最长子串 *T*. 示例: 输入: s = "eceb ...
- LeetCode 340. 至多包含 K 个不同字符的最长子串 (滑动窗口)
340. 至多包含 K 个不同字符的最长子串 class Solution {public int lengthOfLongestSubstringKDistinct(String ss, int 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 ...
- leetcode340. 至多包含 K 个不同字符的最长子串
给定一个字符串 s ,找出 至多 包含 k 个不同字符的最长子串 T. 示例 1: 输入: s = "eceba", k = 2 输出: 3 解释: 则 T 为 "ece ...
- Leetcode——至多包含K个不同字符的最长子串
1. 至多包含两个不同字符的最长子串 (1)滑动窗口 动态地维护一个滑动窗口,如果检测到窗口内出现了超过两个不同的字符,则将窗口整体右移一格. 否则,将滑动窗口向右扩张一格. 最后返回滑动窗口的长度 ...
最新文章
- 基于php留言本毕业设计,基于PHP校园学生论坛留言本设计与实现(MySQL)(含录像)
- JAVA实例,判断是否是瑞年
- 悦虎144固件,华强北二代悦虎144固件,1562M芯片144固件
- Node.js 应用故障排查手册 —— 正确打开 Chrome devtools
- oracle 表改表空间,Oracle批量修改用户表table的表空间
- 基于centos6.5搭建redis伪分布式主备节点
- 【ABAP系列】SAP ABAP SY-SUBRC的含义解析
- C语言中可变参数的宏 __VA_ARGS__
- Unix操作系统的原理、优点与缺点
- 几种常见的模式识别算法整理和总结
- win10下实现bat转exe
- LOL云顶弈记牌易语言源码
- dos批处理脚本自动添加网络共享打印机-简单版且亲测可用
- IOS13以上抓https包,基于win7+Fiddler,操作记录
- mysql 裸设备_MySQL使用裸设备存储
- python68个内置函数_新手入门!68个Python内置函数建议收藏学习
- 工作20天之感悟(嵌入式开发)
- 一张图帮你看懂 iPhone 6 Plus 的屏幕分辨率
- 18c和12客户端 oracle,客户端连接 12、18c 报ORA-28040和ORA-01017 的解决方法
- association weak 属性
热门文章
- Python 视频转换为图片 与 图片转换为视频
- 探索学习:网红容器引擎Docker
- Leetcode 题解-59题
- Dynaper - Dynamic Wallpapers for mac(动态壁纸制作工具) v1.5激活版
- 《OverFeat: Integrated Recognition, Localization and Detection using Convolutional Networks》翻译
- 百度携手重庆渝中区,打造区块链大数据智能化应用示范城区
- 主动降噪耳机什么牌子好?热门降噪耳机排行榜
- 网站丨这四个网站好像有点好玩
- 虚拟化技术 - 概览 [一]
- fidder配合夜神模拟器进行抓包