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

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 * 104
s 由英文字母、数字、符号和空格组成

自己写的时间超限:

class Solution {
public:int lengthOfLongestSubstring(string s) {const char* ch = s.c_str();int i = 0;int n = 0, max = 0;for(int j=0;j<strlen(ch);j++){i= j;n = 0;set<char> ch_set;while (ch[i] != '\0'){if (ch_set.find(ch[i]) != ch_set.end()){if (n > max){max = n;}n = 1;}else{n++;}ch_set.insert(ch[i]);i++;}if (max<n)max = n;}return max;}
};

示例模板:

class Solution {
public:int lengthOfLongestSubstring(string s) {vector<int> m(128, 0);//ASCII范围0-127int ans = 0;int i = 0;//滑动窗口算法for (int j = 0; j < s.size(); j++) { //控制右指针i = max(i, m[s[j]]); //控制左指针m[s[j]] = j + 1; //重复了后,左指针的下一个位置ans = max(ans, j - i + 1); //j-i+1:子串长度}return ans;}
};

原理:

详细参照

http://www.lryc.cn/news/41499.html

相关文章:

  • ChatGPT研究分享:机器第一次开始理解人类世界
  • 可换皮肤的Qt登录界面
  • Spring的常见问题汇总
  • yolov8训练筷子点数数据集
  • 使用 Python 从点云生成 3D 网格
  • vue使用split()将字符串分割数组join()将数组转字符串reverse()将数组反转
  • 队列实现及leetcode相关OJ题
  • 【Log4j2远程命令执行复现CVE-2021-12-09】
  • Jenkins 平台搭建 | 为 Jenkins 配置 nginx 反向代理
  • 【云原生】Docker 架构及工作原理
  • 【Java 】Java NIO 底层原理
  • Vue基础27之VueUI组件
  • 第35篇:Java代码规范全面总结
  • Cookie和Session详解
  • Linux之磁盘分区、挂载
  • web渗透之jwt 安全问题
  • 好用的5款国产低代码平台介绍
  • 【前端学习记录】webpack学习之mini-css-extract-plugin插件
  • FPGA基于RIFFA实现PCIE采集HDMI传输,提供工程源码和QT上位机
  • SpringBoot解析指定Yaml配置文件
  • C++基础算法③——排序算法(选择、冒泡附完整代码)
  • 《高质量C/C++编程》读书笔记一
  • 【完美解决】python flask如何直接加载html,css,js,image等下载的网页模板
  • 2023美赛C题【分析思路+代码】
  • 考研复试6 编译原理
  • uni-app:登录与支付--用户信息
  • Docker 部署 MySQL
  • 警惕,3月20日WOS目录更新,50本SCI/SSCI被剔除,这个出版社多达18本
  • 【 Linux入门 】之 手搓 命令行解释器 bash(带源码)
  • 【运维】运维常用命令