[leetcode] 340. Longest Substring with At Most K Distinct Characters 解题报告
2016-04-03 12:28
357 查看
题目链接: https://leetcode.com/problems/longest-substring-with-at-most-k-distinct-characters/
Given a string, find the length of the longest substring T that contains at most k distinct characters.
For example, Given s =
T is "ece" which its length is 3.
思路: 用一个队列+一个hash表, 每次将一个字符加到队列里去, 并且在hash表中将其计数+1, 如果hash表的长度大于k了, 说明现在字符超出了个数, 因此我们将队列的首元素出队列, 并且在hash表中将对应的字符计数-1, 如果这个字符的计数=0了, 那么就在hash表中删除这个字符, 直到hash表的长度<=k. 并且每次和队列长度比较更新最大长度.
代码如下:
Given a string, find the length of the longest substring T that contains at most k distinct characters.
For example, Given s =
“eceba”and k = 2,
T is "ece" which its length is 3.
思路: 用一个队列+一个hash表, 每次将一个字符加到队列里去, 并且在hash表中将其计数+1, 如果hash表的长度大于k了, 说明现在字符超出了个数, 因此我们将队列的首元素出队列, 并且在hash表中将对应的字符计数-1, 如果这个字符的计数=0了, 那么就在hash表中删除这个字符, 直到hash表的长度<=k. 并且每次和队列长度比较更新最大长度.
代码如下:
class Solution { public: int lengthOfLongestSubstringKDistinct(string s, int k) { if(s.size() == 0 || k <= 0) return 0; unordered_map<char, int> mp; queue<char> que; int Max = 0; for(int i = 0; i< s.size(); i++) { que.push(s[i]); mp[s[i]]++; while(mp.size() > k) { char ch = que.front(); que.pop(); mp[ch]--; if(mp[ch] == 0) mp.erase(ch); } Max = max(Max, (int)que.size()); } return Max; } };
相关文章推荐
- IAP15L2K61S2仿真只占引脚不占串口的说明
- hdoj 2027 统计元音 (字符串)
- Highcharts可拖动式图表
- 表单脚本
- 【FFMPEG】使用FFMPEG+H264实现RTP传输数据
- 【机器学习】马克一个机器学习的博客
- hdu 5655 CA Loves Stick(简单题)(Bestcoder #78 1001)
- Linux kernel模块管理相关详解
- 常见问题
- 【FFMPEG】谈谈RTP传输中的负载类型和时间戳
- vmware tools安装
- 仿百度壁纸客户端(三)——首页单向,双向事件冲突处理,壁纸列表的实现
- 大数据工程师:大数据的java基础 第八周
- 仿百度壁纸客户端(三)——首页单向,双向事件冲突处理,壁纸列表的实现
- Android课程---单选框与复选框的实现
- c++中动态尾随内存的技巧和定位new
- SAS学习笔记:创建图表
- create samba server
- jquery中attr和prop的区别
- 理解Cookie和Session机制