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

滑动窗口-3.无重复字符的最长子串-力扣(LeetCode)

一、题目解析

1.子串VS子数组

它们都是连续的一段,子串是字符串中连续的一段,子数组是数组中连续的一段。

2.字符串s由英文字母、数字、符号和空格组成 

二、算法解析

解法1:暴力枚举+哈希表(判断字符是否出现) 时间复杂度为O(N^2)

固定一个开头,枚举出所有可能子串

解法2:滑动窗口+哈希表 时间复杂度为O(N) 

why?为什么是滑动窗口?

最开始,left和right固定为同一起点处d,right向右移动,当遇到相同元素时,right指针可以停在原地,是因为若和上面left和right固定在e处一样,结果与下图相同,right始终会停留在相同的位置,left没有越过重复的元素a,所以right不会移动;根据后面图的规律,我们能推断出left和right都是向右移动的,而left和right之间的距离就像窗口一样,把内容给框了出来,这就是就是使用滑动窗口的原因。

how?滑动窗口的具体步骤?

1.定义双指针left,right
2.进窗口->让字符进入哈希表中
3.判断->当窗口内出现重复字符时,需要进行处理
        出窗口->从哈希表中删除该字符
这里的判断和出窗口是循环操作
4.更新结果
更新结果的位置可以出现在任意位置,根据题目要求来确认,更新结果位置,该题更新结果位置在判断结束之后更新结果。

 这里需要注意的why而不是how,当你足够熟悉时,滑动窗口代码编写不是难事,但是我们需要学习的思想,知道为什么能使用滑动窗口,不然遇到新的一道题也会找不到门路解决

三、代码示例

解法2:

class Solution {
public:int lengthOfLongestSubstring(string s) {int hash[128] = {0};//数组模拟哈希表int left = 0,right = 0;int n = s.size(),ret = 0;for(;right<n;right++){hash[s[right]]++;//进窗口while(hash[s[right]] > 1)//判断hash[s[left++]]--;ret = max(ret,right-left+1);//更新结果}return ret;}
};

这里没有使用unordered_map和unordered_set,反而使用hash数组通过下标映射来处理字符进入哈希表和删除操作

看到最后,如果对您有所帮助,还请点赞、关注和收藏,我们下期再见!

http://www.dtcms.com/a/274117.html

相关文章:

  • 【Linux】虚拟内存的概念和布局
  • UI自动化神器:Playwright元素定位方法!
  • 新型变种木马正在伪装成Termius入侵系统
  • Kotlin 常用语法糖完整整理
  • 【springboot】IDEA手动创建SpringBoot简单工程(无插件)
  • 【零基础学AI】第37讲:提示词工程(Prompt Engineering)
  • NLP_知识图谱_大模型——个人学习记录
  • 解决MySQL虚拟删除影响唯一索引的问题
  • 《PyWin32:Python与Windows的桥梁,解锁系统自动化新姿势》
  • 从0开始学习R语言--Day44--LR检验
  • 外媒:蚂蚁数科等科技公司在香港数字资产枢纽建设中显身手
  • python 在 Linux CentOS 上安装 playwright 的完整步骤
  • 【每日刷题】回文数
  • 【数据结构】8. 二叉树
  • 【LeetCode 热题 100】24. 两两交换链表中的节点——(解法一)迭代+哨兵
  • leetcode106深度解析:从中序与后序遍历序列构造二叉树
  • leetcode:518. 零钱兑换 II[完全背包]
  • 【网络】Linux 内核优化实战 - net.ipv4.tcp_congestion_control
  • (LeetCode 每日一题) 3169. 无需开会的工作日 ( 排序+贪心 )
  • 力扣_二叉搜索树_python版本
  • 1965–2022年中国大陆高分辨率分部门用水数据集,包含:灌溉用水、工业制造用水、生活用水和火电冷却
  • 【unitrix】 4.21 类型级二进制数基本结构体(types.rs)
  • 李沐动手学深度学习Pytorch-v2笔记【07自动求导代码实现】
  • 进程管理中的队列调度与内存交换机制
  • Jenkins 系统管理与配置
  • 排序算法与前端交互优化
  • 持续集成 简介环境搭建
  • 14 TryHackMe 靶场 Wireshark: The Basics
  • CIU32L051系列 DMA串口无阻塞性收发的实现
  • CentOS 安装 JDK+ NGINX+ Tomcat + Redis + MySQL搭建项目环境