这里我们可以建立一个HashMap,建立每个字符和其最后出现位置之间的映射,然后我们需要定义两个变量res和left,其中res用来记录最长无重复子串的长度,left指向该无重复子串左边的起始位置的前一个,由于是前一个,所以初始化就是-1,然后我们遍历整个字符串,对于每一个遍历到的字符,如果该字符已经在HashMap中存在了,并且如果其映射值大于left的话,那么更新left为当前映射值。然后映射值更新为当前坐标i,这样保证了left始终为当前边界的前一个位置,然后计算窗口长度的时候,直接用i-left即可,用来更新结果res。

这里解释下程序中那个if条件语句中的两个条件m.count(s[i]) && m[s[i]] > left,因为一旦当前字符s[i]在HashMap已经存在映射,说明当前的字符已经出现过了,而若m[s[i]] > left 成立,说明之前出现过的字符在我们的窗口内,那么如果要加上当前这个重复的字符,就要移除之前的那个,所以我们让left赋值为m[s[i]],由于left是窗口左边界的前一个位置(这也是left初始化为-1的原因,因为窗口左边界是从0开始遍历的),所以相当于已经移除出滑动窗口了。举一个最简单的例子"aa",当i=0时,我们建立了a->0的映射,并且此时结果res更新为1,那么当i=1的时候,我们发现a在HashMap中,并且映射值0大于left的-1,所以此时left更新为0,映射对更新为a->1,那么此时i-left还为1,不用更新结果res,那么最终结果res还为1,正确,代码如下:

class Solution { // adaad
public:int lengthOfLongestSubstring(string s) {int res = 0, left = -1, n = s.size();unordered_map<int, int> m;for (int i = 0; i < n; ++i) {if (m.count(s[i]) && m[s[i]] > left) {left = m[s[i]];  }m[s[i]] = i;res = max(res, i - left);            }return res;}
};

【Leetcode | 1】3. 无重复字符的最长子串相关推荐

  1. 刻意练习:LeetCode实战 -- Task16. 无重复字符的最长子串

    背景 本篇图文是LSGO软件技术团队组织的 第二期基础算法(Leetcode)刻意练习训练营 的打卡任务.本期训练营采用分类别练习的模式,即选择了五个知识点(数组.链表.字符串.树.贪心算法),每个知 ...

  2. LeetCode Algorithm 3. 无重复字符的最长子串

    3. 无重复字符的最长子串 Ideas 这题有点KMP那味了. 首先定义三个变量: left:-1,当前处理字符串长度的左索引的前一位 res:0,最长子串长度 idx:{},最长子串中每个字符出现的 ...

  3. 【Leetcode 3】无重复字符的最长子串

    题目描述 2020年8月25日更新 一次遍历 思路: (1)一次遍历,用list存放遍历的连续不重复的子串,当遍历到重复的字符时,用index()方法获得list当中重复字符a的索引,然后将list重 ...

  4. leetcode算法题--无重复字符的最长子串

    题目地址: https://leetcode-cn.com/problems/longest-substring-without-repeating-characters/ https://leetc ...

  5. LeetCode刷题——无重复字符的最长子串

    目录 一.题目描述 二.题解 三.源码 一.题目描述 二.题解 三.源码 class Solution(object):def lengthOfLongestSubstring(self, s):&q ...

  6. 【LeetCode】无重复字符的最长子串【滑动窗口法】

    给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. 示例 1: 输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc&qu ...

  7. LeetCode 3. 无重复字符的最长子串(滑动窗口+哈希)

    1. 题目 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. 示例 1: 输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 " ...

  8. LeetCode题库整理【Java】—— 3 无重复字符的最长子串

    LeetCode题库整理[Java] ## 3 无重复字符的最长子串 题目:给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. 示例 1: 输入: "abcabcbb" ...

  9. 【LeetCode】【HOT】3. 无重复字符的最长子串(哈希表)

    [LeetCode][HOT]3. 无重复字符的最长子串 文章目录 [LeetCode][HOT]3. 无重复字符的最长子串 package hot;import java.util.HashMap; ...

  10. [贪心|字符串] leetcode 3 无重复字符的最长子串

    [贪心|字符串] leetcode 3 无重复字符的最长子串 1.题目 题目链接 给定一个字符串,请你找出其中不含有重复字符的最长子串的长度. 示例1: 输入: "abcabcbb" ...

最新文章

  1. 坚持的力量 第十五篇
  2. 小工程结算书范本_工程结算合同书范本_工程结算合同格式
  3. 宏定义define的使用
  4. 在nodejs中创建cluster
  5. 服务器旧图片维护,图片服务器
  6. Python实现本机网络流量监视器
  7. linuxoracle静默安装应答文件修改_Windows7重要更新补丁安装包 2020.01.17
  8. javascript的规范
  9. 纯css 无视宽高设置垂直水平居中
  10. 网站性能优化小结和spring整合redis
  11. unique Signatures of Histograms for local surface description
  12. ISA Server 2004服务器发布DHCP服务器
  13. 好书一本:《设计心理学》
  14. 提交注册信息到数据库中
  15. 渗透理解Animation时间插值Interpolator类
  16. MAC IDEA常用快捷键
  17. 国外常用免费博客平台
  18. 洛谷1251 餐巾计划问题
  19. DeFi守护神是谁?
  20. python使用 Captcha 模块来生成验证码图片

热门文章

  1. oracle 删除表中重复记录,并保留一条
  2. 世界 Web 2.0 网站评奖揭晓
  3. c语言按shift用户随时退出,2014年云南省“三校生”高考计算机第三次模拟试卷...
  4. java http 压缩_解压HTTP API的GZIP压缩数据
  5. android手机最低内存,原神手机端需要哪些配置 手机端最低配置要求介绍
  6. form字体和颜色java安卓开发_Android 修改App中默认TextView的字体和颜色
  7. 如何关闭苹果手机自动扣费_教你关闭苹果手机系统的自动更新功能,旧手机还能再用几年!...
  8. java taken_java-是否有正确的方法在slf4j中传递参数?
  9. java scrollpane源码_JScrollPane用法 Java实例
  10. linker `cc` not found