当前位置: 首页 > 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

http://www.xdnf.cn/news/140311.html

相关文章:

  • 全球碳化硅晶片市场深度解析:技术迭代、产业重构与未来赛道争夺战(2025-2031)
  • FlinkJobmanager深度解析
  • Vue 3新手入门指南,从安装到基础语法
  • 基于 Python(selenium) 的百度新闻定向爬虫:根据输入的关键词在百度新闻上进行搜索,并爬取新闻详情页的内容
  • 海之淀攻略
  • 404了怎么办快把路由给我断掉(React配置路由)
  • Zeppelin在spark环境导出dataframe
  • 【Linux庖丁解牛】—进程优先级!
  • C++入门小馆: 深入了解STLlist
  • sql server 开启cdc报事务正在执行
  • Qt ModbusSlave多线程实践总结
  • macOS 更新后找不到钥匙串访问工具的解决方案
  • 手机打电话时电脑坐席同时收听对方说话并插入IVR预录声音片段
  • 使用Python脚本在Mac上彻底清除Chrome浏览历史:开发实战与隐私保护指南
  • 【2025最新面试操作系统八股】CPU利用率和load(负载)的区别,CPU利用率怎么算。
  • 边界凸台建模与实例
  • 电子学会—青少年软件编程 python一级等级考试真题—2025年03月
  • 时间复杂度分析
  • Linux学习笔记之环境变量
  • 住宅IP如何选择:长效VS短效,哪个更适合你的业务?
  • java排序算法-计数排序
  • OCR(Optical Character Recognition),光学字符识别
  • HashMap底层原理 什么是哈希表?哈希冲突?如何处理哈希冲突?
  • kotlin与MVVM结合使用总结(三)
  • (Go Gin)基于Go的WEB开发框架,GO Gin是什么?怎么启动?本文给你答案
  • 防火墙技术深度解析:从包过滤到云原生防火墙的部署与实战
  • 【1】GD32 系统架构、内核、中断系统、存储器系统
  • IDEA编写flinkSQL(快速体验版本,--无需配置环境)
  • Vue3后代组件多祖先通讯设计方案
  • OpenCV 图形API(63)图像结构分析和形状描述符------计算图像中非零像素的边界框函数boundingRect()