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

leetcode3无重复字符的最长字串(重点讲滑动窗口)

本文主要讲解无重复字符的最长字串的要点与细节,根据步骤一步步走更方便理解

c++与java代码如下,末尾

具体要点:

1. 区分一下子串和子序列

        子串:要求元素在母串中是连续地出现

        子序列:不要求连续


2. 题目中有两个核心要点:无重复,最长

        无重复:我们可以想到哈希表来解决(哈希表用来判断一个元素是否出现过)

        最长:我们可以利用滑动窗口的思路来解决(滑动窗口通常用来解决某种连续性子序列条件)


3. 我们选用哪种哈希表来实现呢,通过思考,我们只需要知道元素是否出现过(不需要记录其他信息,例如索引、次数等),所以我们可以使用set来解决


4. 解决了无重复的问题,我们思考一下滑动窗口具体应该怎么实现?

        滑动窗口通常都是两个指针,一个right一个left

        开始时我们先移动right,判断条件是:right始终不越界 + right的值始终没有出现过

即             while (right < s.size() && hashset.find(s[right]) == hashset.end())

        移动right并加入set中

即            hashset.insert(s[right]);
                right++;

        直到right不能再移动后,我们记录最大长度,并移动一次left,同时把left的值从set中删除 

即        //更新最大长度

            result = max(result, right - left);

            //删除left并移动left

            hashset.erase(s[left]);

            left++;

        至此,实现一轮滑动(每一轮都只移动一次left) 


c++代码

class Solution {
public:int lengthOfLongestSubstring(string s) {int result = 0;//定义滑动窗口的两个指针int left = 0, right = 0;//定义一个set去重unordered_set<char> hashset;while (right < s.size()) {//不断移动rightwhile (right < s.size() && hashset.find(s[right]) == hashset.end()) {hashset.insert(s[right]);right++;}//更新最大长度result = max(result, right - left);//移动lefthashset.erase(s[left]);left++;}return result;}
};

java代码

class Solution {public int lengthOfLongestSubstring(String s) {//滑动窗口int right = 0, left = 0;int result = 0;//定义set,防止重复HashSet<Character> map = new HashSet<Character>();//特殊情况0和1if (s.length() == 0 || s.length() == 1) {return s.length();}while (s.length() > right) {//right位置如果没有出现过,就addwhile (s.length() > right && !map.contains(s.charAt(right))) {map.add(s.charAt(right));right++;}result = Math.max(result, right - left);//right移动到不能移动,就开始移动leftmap.remove(s.charAt(left));left++;}return result;}
}

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

相关文章:

  • Gobject tutorial 八
  • DDMA信号处理以及数据处理的流程---cfar检测
  • 【机器学习】从理论到实践:决策树算法在机器学习中的应用与实现
  • Zookeeper 集群节点故障剔除、切换、恢复原理
  • 解决帝国cms栏目管理拼音乱码的问题
  • Git快速入门
  • 【18.0】JavaScript---事件案例
  • 推荐系统三十六式学习笔记:原理篇.矩阵分解12|如果关注排序效果,那么这个模型可以帮到你
  • Kafka之ISR机制的理解
  • 如何设计一个点赞系统
  • 对象存储测试工具-s3cmd
  • OpenCV--图像色彩空间及转换
  • RIP解决不连续子网问题
  • 动态轮换代理IP是什么?有什么用?
  • MAC配置VScode中C++项目debug环境
  • PostgreSQL源码分析——CREATE CAST
  • 解锁5G新营销:视频短信的优势与全方位推广策略
  • 视频监控平台功能:国外的硬盘录像机NVR通过ISUP协议(原ehome协议)接入AS-V1000视频平台
  • PostgreSQL查询用户
  • 力扣1539.第k个缺失的正整数
  • 如何快速解决屏幕适配问题
  • Go基础编程 - 09 - 通道(channel)
  • [SAP ABAP] 数据类型
  • 什么是Vue开发技术
  • 【QT】
  • 【转载】使用 .NET Upgrade Assistant(升级助手)升级 .NET 老旧版本项目
  • SpringBoot如何自定义启动Banner 以及自定义启动项目控制台输出信息 类似于若依启动大佛 制作教程
  • 访问控制列表(Access Control Lists,ACL)与哈希查找的爱恨情怨
  • 一文讲清楚分销裂变是什么?怎么做好分销裂变?【附案例】
  • Mybatis Plus 详解 IService、BaseMapper、自动填充、分页查询功能