当前位置: 首页 > article >正文

leetcode:最小覆盖字符串

1笨方法对于算法题目自己能想到的往往是最基础的笨方法。代码如下如果t的长度是len1s的长度是len2那么最小窗口是len1最大窗口是len2。所以可以从len1到len2遍历窗口大小对于每个窗口大小将窗口从前向后进行移动。因为窗口是从小到大进行遍历所以第一次遇到满足条件的子串时就可以直接返回。这种算法的时间复杂度是O(n*n)在leetcode上运行会超时。class Solution { public: string minWindow(string s, string t) { std::mapchar, int tConstMap; std::mapchar, int tTmpMap; for (char c : t) { if (tConstMap.count(c) 0) { tConstMap[c]; } else { tConstMap[c] 1; } tTmpMap[c] 0; } int minWindow t.size(); int maxWindow s.size(); int maxLength s.size(); for (int window minWindow; window maxWindow; window) { for (int i 0; i maxLength - window; i) { for (int j i; j i window; j) { if (tConstMap.count(s[j]) 0) { tTmpMap[s[j]]; } } bool result true; for (auto [c, count] : tTmpMap) { if(count tConstMap[c]) { result false; } tTmpMap[c] 0; } if (result true) { std::cout i: i ,window: window std::endl; return s.substr(i, window); } } } return ; } };针对上边的代码我们可以看到针对一个确定大小的window在从前向后遍历的过程中每次只移动了一个字符的位置但是每次都要对tTmpMap进行清空并重新计算完全可以只对移出窗口的元素和移入窗口的元素进行处理。但是时间复杂度仍然较高在leetcode上运行会超时。class Solution { public: string minWindow(string s, string t) { std::mapchar, int tConstMap; std::mapchar, int tTmpMap; for (char c : t) { if (tConstMap.count(c) 0) { tConstMap[c]; } else { tConstMap[c] 1; } tTmpMap[c] 0; } int minWindow t.size(); int maxWindow s.size(); int maxLength s.size(); for (int window minWindow; window maxWindow; window) { for (int i 0; i maxLength - window; i) { if (i 0) { for (auto [c, value] : tTmpMap) { tTmpMap[c] 0; } for (int j i; j i window; j) { if (tConstMap.count(s[j]) 0) { tTmpMap[s[j]]; } } } else { if (tConstMap.count(s[i window - 1]) 0) { tTmpMap[s[i window - 1]]; } } bool result true; for (auto [c, count] : tTmpMap) { if(count tConstMap[c]) { result false; break; } } if (result true) { return s.substr(i, window); } if (tTmpMap.count(s[i]) 0) { tTmpMap[s[i]]--; } } } return ; } };2leetcode题解一官方题解中没有遍历窗口的大小而是使用双指针的方式。用窗口的左边沿和右边沿来表示一个窗口通过左右边沿的移动来遍历不同的情况。class Solution { public: //t中字符出现的次数 unordered_map char, int ori; //s中字符出现的次数 unordered_map char, int cnt; //判断当前子串是不是覆盖了t bool check() { for (const auto p: ori) { if (cnt[p.first] p.second) { return false; } } return true; } string minWindow(string s, string t) { //t中字符出现的次数 for (const auto c: t) { ori[c]; } int l 0;//窗口左边沿 int r 0;//窗口右边沿 int len INT_MAX; int ansL -1; int ansR -1; while (r int(s.size())) { //统计s中字符的数量移动窗口右边沿 if (ori.find(s[r]) ! ori.end()) { cnt[s[r]]; } //移动窗口左边沿找到慢去条件的最小窗口 while (check() l r) { if (r - l 1 len) { len r - l 1; ansL l; } if (ori.find(s[l]) ! ori.end()) { cnt[s[l]]--; } l; } r; } return ansL -1 ? string() : s.substr(ansL, len); } };3leetcode题解二题解二比题解一性能更高。相同点①都维护了两个map分别用于记录s和t中字符出现的次数。②窗口右边沿的移动均是沿着s进行移动没有其它的条件约束。不同点①题解二中多了一个count用count和t的长度是否相等来表示当前子串是不是覆盖了t。当s中的字符出现次数少于t中字符的出现次数时对count进行递增。而题解一种使用函数check来判断当前子串是不是覆盖了t。②窗口左边沿的移动方式不同题解一种移动左边沿加上check函数进行判断比较好理解题解二中移动左边界是当当前字符出现的次数比t中出现的次数多的时候才会像猴移动(如果字符在t中没有出现在s中出现了那么会移动如果字符在s和t中都出现了并且在s中出现的次数比t中多那么也可以移动)。class Solution { public: string minWindow(string s, string t) { for (char c : t) { ht[c]; } for (int i 0, j 0; i s.size(); i) { hs[s[i]]; if (hs[s[i]] ht[s[i]]) { count; } while (hs[s[j]] ht[s[j]]) { hs[s[j]]--; j; } if (count t.size()) { if (ret.empty() || i - j 1 ret.size()) { ret s.substr(j, i - j 1); } } } return ret; } private: int hs[123] {0}; int ht[123] {0}; int count 0; std::string ret ; };

相关文章:

leetcode:最小覆盖字符串

1笨方法对于算法题目,自己能想到的往往是最基础的笨方法。代码如下:如果t的长度是len1,s的长度是len2,那么最小窗口是len1,最大窗口是len2。所以可以从len1到len2,遍历窗口大小,对于每个窗口大小…...

如何解锁NVIDIA显卡隐藏性能:NVIDIA Profile Inspector完整配置指南

如何解锁NVIDIA显卡隐藏性能:NVIDIA Profile Inspector完整配置指南 【免费下载链接】nvidiaProfileInspector 项目地址: https://gitcode.com/gh_mirrors/nv/nvidiaProfileInspector 你是否遇到过游戏画面撕裂、帧率不稳或输入延迟过高的问题?N…...

PowerShell 第11章:过滤和比较(下)Where-Object、迭代命令行模型、$_作用域与实战练习

🔥个人主页:杨利杰YJlio❄️个人专栏:《Sysinternals实战教程》《Windows PowerShell 实战》《WINDOWS教程》《IOS教程》《微信助手》《锤子助手》 《Python》 《Kali Linux》 《那些年未解决的Windows疑难杂症》🌟 让复杂的事情更…...

Pytorch图像去噪实战(十六):YCbCr颜色空间图像去噪,解决RGB去噪后的色偏问题

Pytorch图像去噪实战(十六):YCbCr颜色空间图像去噪,解决RGB去噪后的色偏问题 一、问题场景:RGB模型降噪了,但颜色变脏了 上一篇我们实现了RGB图像去噪。 模型能正常训练,也能处理彩色图片,但在真实测试中我遇到一个非常明显的问题: 噪声确实少了,但颜色变灰、变暗,…...

Mac鼠标滚轮优化终极指南:如何用Mos解决外设滚动冲突并提升工作效率

Mac鼠标滚轮优化终极指南:如何用Mos解决外设滚动冲突并提升工作效率 【免费下载链接】Mos 一个用于在 macOS 上平滑你的鼠标滚动效果或单独设置滚动方向的小工具, 让你的滚轮爽如触控板 | A lightweight tool used to smooth scrolling and set scroll direction in…...

多尺度3D场景生成技术:从NeRF到动态高斯面元

1. 技术背景与核心挑战在计算机视觉和图形学领域,3D场景生成技术正经历着革命性的发展。这项技术允许我们从单张2D图像出发,构建出可自由探索的3D虚拟环境。想象一下,当你看到一张向日葵田的照片时,不仅能"走进去"环顾四…...

基于配置化驱动的对话AI开发:从原理到Confichat实践

1. 项目概述:一个专注于配置化对话的AI工具最近在折腾AI应用开发,特别是想快速搭建一个能处理特定领域对话的聊天机器人时,发现了一个挺有意思的项目:1runeberg/confichat。这个名字拆开看,“confi” 像是 “configura…...

【Docker安全红皮书更新】:27版强制网络命名空间隔离、默认拒绝模式与自动微分段(仅限企业版Early Access)

更多请点击: https://intelliparadigm.com 第一章:Docker 27网络隔离安全增强全景概览 Docker 27(即 Docker Engine v27.x)引入了多项底层网络栈重构与安全策略强化机制,核心聚焦于容器间通信的默认隔离性、跨命名空间…...

OASIS快速入门指南:5分钟搭建你的第一个社交模拟环境

OASIS快速入门指南:5分钟搭建你的第一个社交模拟环境 【免费下载链接】oasis 🏝️ OASIS: Open Agent Social Interaction Simulations with One Million Agents. 项目地址: https://gitcode.com/gh_mirrors/oasis2/oasis OASIS(Open…...

Phi-2轻量级语言模型:高效推理与本地部署实践

1. 认识Phi-2:轻量级语言模型的新标杆 在大型语言模型(LLM)如GPT-4、Claude等占据主流的今天,微软研究院推出的Phi-2以其仅2.7B参数的"小身材"却实现了令人惊艳的常识推理和语言理解能力。这个模型最吸引我的地方在于—…...

别再手动调时间了!RedHat 8/9 上用 Chrony 搞定集群时间同步,保姆级配置流程

RedHat集群时间同步实战:用Chrony告别时间漂移的终极指南 凌晨三点,运维工程师小李被刺耳的告警声惊醒——日志系统显示某关键业务节点的证书验证突然集体失效。排查两小时后,真相令人哭笑不得:集群中三台服务器的时间偏差超过了证…...

B站缓存视频一键转换终极指南:m4s-converter完整使用教程

B站缓存视频一键转换终极指南:m4s-converter完整使用教程 【免费下载链接】m4s-converter 一个跨平台小工具,将bilibili缓存的m4s格式音视频文件合并成mp4 项目地址: https://gitcode.com/gh_mirrors/m4/m4s-converter 你是否曾经遇到过这样的困境…...

FastAPI与MongoDB构建现代后端服务:从原理到生产级实践

1. 项目概述:为什么选择 FastAPI MongoDB 构建现代后端服务?如果你正在寻找一个既能快速开发原型,又能轻松应对高并发、数据模型灵活多变的后端技术栈,那么wpcodevo/fastapi_mongodb这个项目模板绝对值得你深入研究。它不是一个简…...

从崩溃到重生:Genesis物理引擎构建失败全案解决方案

从崩溃到重生:Genesis物理引擎构建失败全案解决方案 【免费下载链接】Genesis A generative world for general-purpose robotics & embodied AI learning. 项目地址: https://gitcode.com/GitHub_Trending/genesi/Genesis Genesis是一个为通用机器人技术…...

智慧树刷课插件:三步实现高效学习自动化,节省90%刷课时间

智慧树刷课插件:三步实现高效学习自动化,节省90%刷课时间 【免费下载链接】zhihuishu 智慧树刷课插件,自动播放下一集、1.5倍速度、无声 项目地址: https://gitcode.com/gh_mirrors/zh/zhihuishu 你是否厌倦了在智慧树平台上手动点击&…...

自动化系统清理工具Rguvh/byebyeclaw:从声明式配置到安全实践

1. 项目概述与核心价值最近在和一些做安全研究的朋友交流时,经常听到一个词:“Rguvh/byebyeclaw”。乍一听,这像是一个晦涩的内部代号,或者某个开源工具的神秘仓库。实际上,它指向的是一个在特定技术圈层里&#xff0c…...

开源技能安全扫描实战:静态代码分析守护第三方代码集成

1. 项目概述与核心价值在开源生态和自动化工具日益普及的今天,我们经常需要集成或运行来自社区的各种“技能”(Skills)或插件。这些代码片段极大地提升了效率,但同时也引入了不可忽视的安全风险。想象一下,你从某个仓库…...

如何让Windows电脑成为iPhone的免费AirPlay 2接收器?完整指南

如何让Windows电脑成为iPhone的免费AirPlay 2接收器?完整指南 【免费下载链接】airplay2-win Airplay2 for windows 项目地址: https://gitcode.com/gh_mirrors/ai/airplay2-win 你是否曾经遇到过这样的尴尬场景:会议室里同事用iPhone演示产品&am…...

革命性MEV框架Artemis:用Rust构建高性能套利机器人的终极指南

革命性MEV框架Artemis:用Rust构建高性能套利机器人的终极指南 【免费下载链接】artemis A simple, modular, and fast framework for writing MEV bots in Rust. 项目地址: https://gitcode.com/gh_mirrors/ar/artemis Artemis是一个简单、模块化且快速的框架…...

一站式音乐解锁工具:让加密音频文件重获自由

一站式音乐解锁工具:让加密音频文件重获自由 【免费下载链接】unlock-music 在浏览器中解锁加密的音乐文件。原仓库: 1. https://github.com/unlock-music/unlock-music ;2. https://git.unlock-music.dev/um/web 项目地址: https://gitcod…...

Physijs完全指南:5分钟为Three.js添加真实物理效果

Physijs完全指南:5分钟为Three.js添加真实物理效果 【免费下载链接】Physijs Physics plugin for Three.js 项目地址: https://gitcode.com/gh_mirrors/ph/Physijs Physijs是Three.js的物理引擎插件,它能让开发者轻松为3D场景添加真实的物理效果&…...

eSpeak NG:如何为嵌入式系统选择最佳轻量级TTS解决方案?架构设计与实践指南

eSpeak NG:如何为嵌入式系统选择最佳轻量级TTS解决方案?架构设计与实践指南 【免费下载链接】espeak-ng eSpeak NG is an open source speech synthesizer that supports more than hundred languages and accents. 项目地址: https://gitcode.com/Git…...

3大核心功能全面解析:Apollo PS4存档管理工具终极指南

3大核心功能全面解析:Apollo PS4存档管理工具终极指南 【免费下载链接】apollo-ps4 Apollo Save Tool (PS4) 项目地址: https://gitcode.com/gh_mirrors/ap/apollo-ps4 你是否曾因PS4游戏存档丢失而苦恼?或是想在多台主机间转移心爱的游戏进度&am…...

从密钥泄露应急响应看PPRF的价值:如何在不更换主密钥的情况下,安全地撤销一个子密钥?

密钥泄露应急响应中的PPRF实战:精准撤销子密钥的密码学艺术 想象这样一个场景:凌晨三点,你的手机突然响起刺耳的警报声——监控系统检测到某个API密钥正在异常地点被频繁调用。作为安全负责人,你清楚这意味着什么:密钥…...

知识资产管理数字化转型的格式迁移挑战:YuqueExportToMarkdown的无损转换创新方案

知识资产管理数字化转型的格式迁移挑战:YuqueExportToMarkdown的无损转换创新方案 【免费下载链接】YuqueExportToMarkdown 将语雀导出的lake文件转为markdown 项目地址: https://gitcode.com/gh_mirrors/yu/YuqueExportToMarkdown 在数字化转型浪潮席卷企业…...

VSCode 2026金融安全检测失效的9个隐藏陷阱:第7个导致某头部券商漏报SWIFT API凭证硬编码(附修复后CWE-798验证报告)

更多请点击: https://intelliparadigm.com 第一章:VSCode 2026金融安全检测失效的全局风险图谱 VSCode 2026 版本中,内置的金融合规插件(如 FinSec-Analyzer v3.2)因 TLS 1.3 握手策略变更与静态分析引擎缓存机制缺陷…...

什么是“尖点”?为什么f(x)=|x|在x=0处导数不存在?

什么是“尖点”?为什么f(x)=|x|在x=0处导数不存在? 绝对值函数f(x)=|x|是导数不存在的经典例子。咱们一步步来拆解,先从“尖点”说起,然后连接到导数的概念。 1. 什么叫“尖点”? 直观定义:在函数图像上,“尖点”(也叫“尖角”或“拐角”)指的是曲线在某个点处不是光…...

基因组序列比对的硬件加速技术与应用

1. 基因组序列比对的硬件加速革命在生物信息学领域,基因组序列比对一直是个计算密集型任务。随着高通量测序技术的普及,传统的软件算法已经难以应对海量数据的处理需求。我曾在一次人类全基因组分析项目中,亲眼见证了一个常规比对任务在高端服…...

10分钟掌握SpeechBrain超参数优化:贝叶斯搜索与网格搜索终极指南

10分钟掌握SpeechBrain超参数优化:贝叶斯搜索与网格搜索终极指南 【免费下载链接】speechbrain A PyTorch-based Speech Toolkit 项目地址: https://gitcode.com/GitHub_Trending/sp/speechbrain SpeechBrain是一个基于PyTorch的语音工具包,提供了…...

开源技能库构建指南:从零打造个人技术工具箱

1. 项目概述:一个开源技能库的诞生与价值最近在整理自己的技术笔记和项目经验时,我意识到一个问题:很多零散的、看似不起眼的“小技能”或“小技巧”,往往在关键时刻能解决大问题。这些技能可能是一次调试中偶然发现的命令参数&am…...