news 2026/7/21 15:51:55

386 · Longest Substring with At Most K Distinct Characters最多有k个不同字符的最长子字符串(滑动窗口)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
386 · Longest Substring with At Most K Distinct Characters最多有k个不同字符的最长子字符串(滑动窗口)

链接:LintCode 炼码 - 更高效的学习体验!

https://mp.weixin.qq.com/s?__biz=MzU2OTUyNzk1NQ==&mid=2247491103&idx=1&sn=8d9a2ed68a7dd31bb2aeb50ffe8fa4c8&source=41#wechat_redirect

题解:

class Solution { public: /** * @param s: A string * @param k: An integer * @return: An integer */ int lengthOfLongestSubstringKDistinct(string &s, int k) { // write your code here if (s.size() <= 0) { return 0; } int right = 0; int left = 0; int max_len = 0; std::unordered_map<char, int> table; while (right < s.size()) { ++table[s[right]]; if (table.size() > k) { while (left <s.size() && table.size() > k) { if (--table[s[left]] == 0) { table.erase(s[left]); } ++left; } } max_len = max(max_len, right-left+1); ++right; } return max_len; } };
class Solution { public: /** * @param s: A string * @param k: An integer * @return: An integer */ int lengthOfLongestSubstringKDistinct(string &s, int k) { // write your code here int len = s.size(); if (len <= 0) { return 0; } unordered_map<char, int> table; int j = 0; int result = INT_MIN; for (int i = 0; i < s.size(); ++i) { while (j < s.size() && table.size() <= k) { ++table[s[j]]; ++j; } if (table.size() > k) { result = max(result, j-i-1); } else if (table.size() <= k) { result = max(result, j-i); } if (--table[s[i]] == 0) { table.erase(s[i]); } } return result; } };

while循环退出时,如果是因为table.size() > k(即插入后不同字符数超过k),那么j已经自增,指向了非法窗口的下一个位置。此时,合法的窗口应该是[i, j-2],长度为(j-2) - i + 1 = j - i - 1。因此需要-1

如果while退出是因为j == s.size()或插入后仍满足table.size() <= k,那么窗口[i, j-1]是合法的,长度直接为j - i

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/21 15:48:37

第三章 镜像仓库总结-001篇

文章目录 一、为什么需要镜像仓库? 二、三种常用仓库,各有各的用处 1. **Registry:简单版“本地私人仓库”** 2. **Harbor:企业级“豪华仓库”** 3. **公有云仓库:别人搭好的“公共网盘”** 三、核心操作(记住这几个命令就够了) 四、怎么选? 这篇文档讲的是 Docker镜像…

作者头像 李华
网站建设 2026/7/21 15:47:24

smsBomb配置完全指南:从配置文件到API密钥的详细设置

smsBomb配置完全指南&#xff1a;从配置文件到API密钥的详细设置 【免费下载链接】smsBomb 短信&#x1f4a3;炸&#x1f414; 项目地址: https://gitcode.com/gh_mirrors/sms/smsBomb 想要掌握smsBomb短信轰炸工具的核心使用方法吗&#xff1f;&#x1f60a; 这篇完整的…

作者头像 李华
网站建设 2026/7/21 15:45:03

运维工程师转型渗透测试:思维重塑与6-9个月实战路线图

1. 从“守门员”到“破门者”&#xff1a;运维转渗透的职业逻辑重塑 干了这么多年运维&#xff0c;从机房搬服务器到写自动化脚本&#xff0c;从救火式排障到构建高可用架构&#xff0c;我自认为对“稳定”和“安全”的理解已经刻在骨子里了。但最近几年&#xff0c;一个越来越…

作者头像 李华
网站建设 2026/7/21 15:43:17

Claude Code实战避坑指南:7大核心痛点与解决方案

最近在尝试将Claude Code集成到开发工作流中&#xff0c;发现不少开发者&#xff0c;包括我自己&#xff0c;都踩过一些相似的“坑”。从环境配置的兼容性问题&#xff0c;到模型调用时的参数误区&#xff0c;再到项目集成的效率瓶颈&#xff0c;这些细节问题往往消耗大量时间&…

作者头像 李华