首页 > 其他分享 >刷题[Leetcode]3. 无重复字符的最长子串

刷题[Leetcode]3. 无重复字符的最长子串

时间:2023-09-03 23:14:10浏览次数:55  
标签:子串 right 重复 int set 端点 Leetcode unset 刷题

3. 无重复字符的最长子串 class Solution { public:     int lengthOfLongestSubstring(string s) {         if (s.size() == 0) return 0;         unordered_set<int> unset;         int maxLen = 0;         int left = 0;         for(int right = 0; right < s.size(); right++){             while(unset.find(s[right]) != unset.end()){                 unset.erase(s[left++]);             }             unset.insert(s[right]);             int curLen = right - left + 1;             maxLen = max(maxLen, curLen);         }         return maxLen;             } };   右端点移动开始扫描,如果扫描到重复的,就转去处理查重set。 为什么是while而不是if。 原因在于出现重复时,肯定是一个当前右端点与某一个set中的数重复了,但是这个数未必是左端点的,可能只是右端点的前一个 无论是哪种情况,都需要从不重复的数再开始,右端点加入之前一定是不重复的,所以右端点加入之后如果重复,就一直移除set的左端点,并且右移一位。

标签:子串,right,重复,int,set,端点,Leetcode,unset,刷题
From: https://www.cnblogs.com/synapse331/p/17675801.html

相关文章

  • LeetCode952三部曲之二:小幅度优化(137ms -> 122ms,超39% -> 超51%)
    欢迎访问我的GitHub这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos本篇概览本文是《LeetCode952三部曲》系列之二,在前文中,咱们详细分析了解题思路,然后按照思路写出了代码,在LeetCode提交成功,成绩如下图所示,137ms,超过39%不得不说这个成绩......
  • 刷题技巧
    刷题几个阶段:1,第一遍:知道。直接看答案,不要自己想,了解所有最优解,方法技巧第一。做题套路,以印象为主。2,第二遍:熟悉。过easy题,记住;做medium,重点题背,反复背。最简单会,大多不会。记住做题套路,以记住为主。3,第三遍:做题。做easy题;做部分medium题,hard题有思路。夯实medium基础。熟练运......
  • leetcode226 翻转二叉树——简单
      #Definitionforabinarytreenode.#classTreeNode:#def__init__(self,val=0,left=None,right=None):#self.val=val#self.left=left#self.right=rightclassSolution:definvertTree(self,root):......
  • 力扣刷题指南
    众所周知,力扣涵盖了大部分算法面试题,国内外知名科技公司都会在上面挑选题目用于面试环节,所以要想找到一份好工作,刷力扣题一定是程序员小伙伴的不二之选。但对于刚启蒙的程序员小白来说,上力扣网站刷题的方法眼花缭乱,哪一种才是最有效的?这里力扣君还得再强调一下,网站刷题方法虽多,......
  • 嵌入式面试笔试刷题(day14)
    (文章目录)前言本篇文章继续我们的刷题之路。一、进程控制块这里只讲解进程的PCB控制块,线程的TCP控制块作用和进程PCB控制块作用类似。1.PCB控制块的作用进程控制块(ProcessControlBlock,PCB)是操作系统中用于管理和跟踪进程信息的数据结构。每个进程在操作系统中都有一个对......
  • Leetcode 剑指 Offer 58 - II. 左旋转字符串(Zuo xuan zhuan zi fu chuan lcof)
    题目链接字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如,输入字符串"abcdefg"和数字2,该函数将返回左旋转两位得到的结果"cdefgab"。示例1:输入:s="abcdefg",k=2输出:"cdefgab"示例2:输入:s=......
  • C++刷题输入输出和常用函数处理
    1.输入数字但非默认的十进制,比如输入的是十六进制数,但要转为十进制再进行别的处理。当我们在编程中处理十六进制数时,通常会将其表示为字符串。cin>>hex>>m;//输入十六进制,m会自动转十进制。2.int和string中单个字符互转strings="12345";inta0=s[0]-'0';//字符转......
  • Leetcode刷题笔记——二分法
    二分法是搜索算法中极其典型的方法,其要求输入序列有序并可随机访问。算法思想为输入:有序数组nums,目的数值target要求输出:如果target存在在数组中,则输出其index,否则输出-1将原数组通过[left,right]两个索引划分范围,初值left=0,right=数组的最后一个元素当left<=right时mid......
  • LeetCode952三部曲之一:解题思路和初级解法(137ms,超39%)
    欢迎访问我的GitHub这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos题目描述难度:困难编程语言:Java给定一个由不同正整数的组成的非空数组nums,考虑下面的图:有nums.length个节点,按从nums[0]到nums[nums.length-1]标记;只有当......
  • 前端歌谣的刷题之路-第七题-语义化标签
    目录前言题目编辑核心代码总结前言我是歌谣歌谣的意志是永恒的放弃很容易但是坚持一定很酷本题目源自于牛客网题目请使用语义化标签创建头部标签且包含导航标签。注意:只需在html模块填写标签结构,有且仅有一个头部标签和一个导航标签编辑核心代码```语义化标签```......