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

【滑动窗口+哈希表/数组记录】Leetcode 3. 无重复字符的最长子串

题目要求

给定一个字符串 s,找出其中不含有重复字符的最长子串的长度。

子字符串是字符串中连续非空字符序列。

示例 1

输入:s = "abcabcbb"
输出:3
解释:无重复字符的最长子串是 "abc",长度为 3

示例 2

输入:s = "bbbbb"
输出:1
解释:无重复字符的最长子串是 "b",长度为 1

示例 3

输入:s = "pwwkew"
输出:3
解释:无重复字符的最长子串是 "wke",长度为 3。请注意,答案必须是子串的长度,"pwke" 是一个子序列,不是子串。

提示

  • 0 <= s.length <= 5 * 10^4
  • s 由英文字母、数字、符号和空格组成

实际应用

文本编辑器中的应用

在文本编辑器中,用户输入文本时,编辑器需要实时检测是否有重复字符,以帮助用户避免输入错误。

数据流分析中的应用

在网络数据流分析中,需要实时检测数据流中的重复数据包,进行数据清洗和去重。

滑动窗口法

使用滑动窗口算法结合哈希表或数组来高效地记录和更新字符的位置,从而快速判断是否出现重复字符。

哈希表记录字符频率

#include <iostream>
#include <unordered_map>
#include <string>using namespace std;int lengthOfLongestSubstring(string s) {unordered_map<char, int> map;int left = 0, right = 0, res = 0;while (right < s.size()) {// 如果当前字符在map中存在,则更新left指针if (map.find(s[right]) != map.end()) {left = max(left, map[s[right]] + 1);}// 更新当前字符的索引map[s[right]] = right;right++;res = max(res, right - left);}return res;
}int main() {string s = "abcabcbb";cout << lengthOfLongestSubstring(s) << endl;return 0;
}

数组记录字符频率

#include <iostream>
#include <vector>
#include <string>using namespace std;int lengthOfLongestSubstring(string s) {vector<int> map(256, -1);int left = 0, right = 0, res = 0;while (right < s.size()) {// 如果字符重复,更新左边界if (map[s[right]] != -1) {left = max(left, map[s[right]] + 1);}// 更新字符的位置map[s[right]] = right;right++;res = max(res, right - left);    }return res;
}int main() {string s = "abcabcbb";cout << lengthOfLongestSubstring(s) << endl;return 0;
}

推荐一下

https://github.com/0voice

相关文章:

  • 搜索二叉树-key的搜索模型
  • nc工具!Netcat:TCP/IP瑞士军刀!全参数详细教程!Kali Linux教程!
  • prometheus通过Endpoints自定义grafana的dashboard模块
  • 时序数据库IoTDB在航空航天领域的解决方案
  • 对Mac文字双击或三击鼠标左键没有任何反应
  • Mac 「brew」快速安装MySQL
  • 河道流量监测,雷达流量计赋能水安全智慧守护
  • 4.26 世界知识产权日|CRMEB与您共筑知识产权保护铠甲
  • 【playwright】 page.wait_for_timeout() 和time.sleep()区别
  • 【华为HCIP | 华为数通工程师】821—多选解析—第十七页
  • Spring 与 ActiveMQ 的深度集成实践(一)
  • 告别进度失控:用燃尽图补上甘特图的监控盲区
  • 第100+39步 ChatGPT学习:R语言实现Xgboost SHAP
  • (三) Trae 调试C++ 基本概念
  • 《AI大模型趣味实战》构建基于Flask和Ollama的AI助手聊天网站:分布式架构与ngrok内网穿透实现
  • 数字人民币杠杆破局预付乱象 XBIT智能合约筑牢资金安全防线
  • 基于Java,SpringBoot,Vue,HTML宠物相亲配对婚恋系统设计
  • 如何实现Android屏幕和音频采集并启动RTSP服务?
  • 【Linux内核设计与实现】第三章——进程管理04
  • 多模态大语言模型(MLLM)- kimi-vl technical report论文阅读
  • 从“高阶智驾”到“辅助驾驶”,上海车展上的“智驾”宣发变调
  • 从中央政治局会议看经济工作着力点:以高质量发展的确定性应对外部不确定性
  • 双拥主题歌曲MV:爱我人民,爱我军
  • 3岁男童疑遭父亲虐待,杭州警方:在异地发生,嫌疑人已被抓
  • 北京顺义潮白河大桥主跨坍塌原因公布,已成立事故调查组
  • 观察|动力电池步入“多核时代”,宁德时代新技术密集开箱有何启示