【Leetcode | 1】3. 无重复字符的最长子串
这里我们可以建立一个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. 无重复字符的最长子串相关推荐
- 刻意练习:LeetCode实战 -- Task16. 无重复字符的最长子串
背景 本篇图文是LSGO软件技术团队组织的 第二期基础算法(Leetcode)刻意练习训练营 的打卡任务.本期训练营采用分类别练习的模式,即选择了五个知识点(数组.链表.字符串.树.贪心算法),每个知 ...
- LeetCode Algorithm 3. 无重复字符的最长子串
3. 无重复字符的最长子串 Ideas 这题有点KMP那味了. 首先定义三个变量: left:-1,当前处理字符串长度的左索引的前一位 res:0,最长子串长度 idx:{},最长子串中每个字符出现的 ...
- 【Leetcode 3】无重复字符的最长子串
题目描述 2020年8月25日更新 一次遍历 思路: (1)一次遍历,用list存放遍历的连续不重复的子串,当遍历到重复的字符时,用index()方法获得list当中重复字符a的索引,然后将list重 ...
- leetcode算法题--无重复字符的最长子串
题目地址: https://leetcode-cn.com/problems/longest-substring-without-repeating-characters/ https://leetc ...
- LeetCode刷题——无重复字符的最长子串
目录 一.题目描述 二.题解 三.源码 一.题目描述 二.题解 三.源码 class Solution(object):def lengthOfLongestSubstring(self, s):&q ...
- 【LeetCode】无重复字符的最长子串【滑动窗口法】
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. 示例 1: 输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc&qu ...
- LeetCode 3. 无重复字符的最长子串(滑动窗口+哈希)
1. 题目 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. 示例 1: 输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 " ...
- LeetCode题库整理【Java】—— 3 无重复字符的最长子串
LeetCode题库整理[Java] ## 3 无重复字符的最长子串 题目:给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. 示例 1: 输入: "abcabcbb" ...
- 【LeetCode】【HOT】3. 无重复字符的最长子串(哈希表)
[LeetCode][HOT]3. 无重复字符的最长子串 文章目录 [LeetCode][HOT]3. 无重复字符的最长子串 package hot;import java.util.HashMap; ...
- [贪心|字符串] leetcode 3 无重复字符的最长子串
[贪心|字符串] leetcode 3 无重复字符的最长子串 1.题目 题目链接 给定一个字符串,请你找出其中不含有重复字符的最长子串的长度. 示例1: 输入: "abcabcbb" ...
最新文章
- 坚持的力量 第十五篇
- 小工程结算书范本_工程结算合同书范本_工程结算合同格式
- 宏定义define的使用
- 在nodejs中创建cluster
- 服务器旧图片维护,图片服务器
- Python实现本机网络流量监视器
- linuxoracle静默安装应答文件修改_Windows7重要更新补丁安装包 2020.01.17
- javascript的规范
- 纯css 无视宽高设置垂直水平居中
- 网站性能优化小结和spring整合redis
- unique Signatures of Histograms for local surface description
- ISA Server 2004服务器发布DHCP服务器
- 好书一本:《设计心理学》
- 提交注册信息到数据库中
- 渗透理解Animation时间插值Interpolator类
- MAC IDEA常用快捷键
- 国外常用免费博客平台
- 洛谷1251 餐巾计划问题
- DeFi守护神是谁?
- python使用 Captcha 模块来生成验证码图片
热门文章
- oracle 删除表中重复记录,并保留一条
- 世界 Web 2.0 网站评奖揭晓
- c语言按shift用户随时退出,2014年云南省“三校生”高考计算机第三次模拟试卷...
- java http 压缩_解压HTTP API的GZIP压缩数据
- android手机最低内存,原神手机端需要哪些配置 手机端最低配置要求介绍
- form字体和颜色java安卓开发_Android 修改App中默认TextView的字体和颜色
- 如何关闭苹果手机自动扣费_教你关闭苹果手机系统的自动更新功能,旧手机还能再用几年!...
- java taken_java-是否有正确的方法在slf4j中传递参数?
- java scrollpane源码_JScrollPane用法 Java实例
- linker `cc` not found