LeetCode 3. 无重复字符的最长子串 思路讲解

LC 题目链接:https://leetcode-cn.com/problems/longest-substring-without-repeating-characters/

题目思路:

        // 使用 unordered_set 记录滑动窗口中出现过的字符;  

        // 使用left /rigth 分别指向 窗口的左边和右边,起始位置均为 第一个字符;

      // while (right < s.size())循环执行如下判断;

        // 判断 right 指向的字符在 set中是否存在,不存在 直接添加到set 中,同时 right++;  然后 再 比较 记录 set 的size  与 最长字串长度 变量的大小

        // 存在,则将 left 指向的字符从set中删除,同时 left++; 再执行上面的判断;

   最终返回最长字串长度 即可。 

    这里有2点提下:

1.  通常的思路是将 滑动窗口中的出现过的字串 作为 一个子串, s.substr(left, right-left) 即可得到该子串; subString.find(s[right])  这种方式来确认当前的字符是否出现在子串中,这种方式对于较短的字符串是可以解析的;但是有的用例会超时,因为查找的效率太低,不停的产生子串,然后进行搜索; 利用 set 的元素唯一性则是一个很方便的思路,查找 和 删除都很方便;

2. 使用 unordered_set  来代替set, 这个是出于性能的考虑,因为我们并不需要set中的元素有序,只要唯一即可。 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值