leetcode--3 无重复最长字串

题目描述

给定一个字符串 s ,请你找出其中不含有重复字符的 最长

子串

 的长度。

示例 1:

输入: s = "abcabcbb"
输出: 3 
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。

示例 2:

输入: s = "bbbbb"
输出: 1
解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。

示例 3:

输入: s = "pwwkew"
输出: 3
解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。

解题思路

1.思路
最自然的思路是暴力求解法,遍历字符串,每个字符位置求解该位置的最长子串,二次优化是借助KMP算法,不需要遍历字符串,而是从与当前字符冲突的位置开始再次遍历。

然后发现滑动窗口法是最适合解决当前问题的方法,滑动窗口算法思路如下:

当 window[c] 值大于 1 时,说明窗口中存在重复字符,不符合条件,就该移动 left 缩小窗口了。

另外,要在收缩窗口完成后更新 res,因为窗口收缩的 while 条件是存在重复元素,换句话说收缩完成后一定保证窗口中没有重复。

代码

class Solution {public int lengthOfLongestSubstring(String s) {Map<Character, Integer> window = new HashMap<>();int left = 0, right = 0;int res = 0; // 记录结果while (right < s.length()) {char c = s.charAt(right);right++;// 进行窗口内数据的一系列更新window.put(c, window.getOrDefault(c, 0) + 1);// 判断左侧窗口是否要收缩while (window.get(c) > 1) {char d = s.charAt(left);left++;// 进行窗口内数据的一系列更新window.put(d, window.get(d) - 1);}// 在这里更新答案res = Math.max(res, right - left);}return res;}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/825820.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PyTorch torch.nn.functional.one_hot用法解析

1.用法 在PyTorch中&#xff0c;我们可以使用torch.nn.functional.one_hot函数来实现One-Hot编码。下面是一个简单的例子&#xff1a; import torch import torch.nn.functional as F # 假设我们有一个包含类别标签的张量 labels torch.tensor([0, 2, 1, 0, 2]) # 使用torch…

深度学习概念

AIGC数据生产&#xff1a; AIGC在生成小图片时效果更佳(因为小图信息量更少&#xff0c;相同算力下效果更好)&#xff1b;所以适合构造一些交通场景。比如护栏损坏&#xff1a;只mask原图的部分区域(图中白色区域)&#xff0c;即可引导模型在mask处生成损坏的护栏。 基于此方…

【LeetCode热题100】【动态规划】完全平方数

题目链接&#xff1a;279. 完全平方数 - 力扣&#xff08;LeetCode&#xff09; 完全平方数是可以表示成某个整数的平方的数&#xff0c;要找和为n的完全平方数的最少数目 满足要求的完全平方数最小是1&#xff0c;最大不会超过n的平方根 所以题目变成要从1&#xff0c;2&am…

【LeetCode热题100】【动态规划】最长递增子序列

题目链接&#xff1a;300. 最长递增子序列 - 力扣&#xff08;LeetCode&#xff09; 让dp[i]是以nums[i]为结尾的子序列的最长递增长度&#xff0c;遍历nums[i]之前的元素&#xff0c;如果有比nums[i]小的&#xff0c;说明递增子序列可以延申 class Solution { public:int le…

拖拽式工作流有哪几个优势?

在信息技术迅猛发展的今天&#xff0c;如何助力中小型企业在数字化转型的过程中平稳过渡&#xff1f;又是如何让中小型企业摆脱数据孤岛、成本投入高等各种瓶颈和难题&#xff1f;低代码技术平台是近些年较为理想的平台产品&#xff0c;其中拖拽式工作流优势特点突出&#xff0…

地埋电缆故障检测方法有哪些?地埋电缆故障检测费用是多少?

地埋电缆故障检测方法主要涵盖脉冲反射法、桥接法、高压闪络法和声波定位法等多种方法。选择适当的方法取决于故障类型、电缆类型和实际现场条件。至于地埋电缆故障检测费用则受到多个因素的影响&#xff0c;包括故障类型、检测方法的复杂性、检测设备的先进程度以及所处地区的…

从零开始搭建社交圈子系统:充实人脉的最佳路径

线上交友圈&#xff1a;拓展社交网络的新时代 线上交友圈是社交网络的新引擎&#xff0c;提供了更广泛的社交机会&#xff0c;注重共同兴趣的连接&#xff0c;强调多样性的社交形式&#xff0c;更真实地展示自己&#xff0c;让朋友更全面地了解我们的生活状态。虽然虚拟交往存在…

SD-WAN解决电商企业海外业务网络难题

全球化背景下&#xff0c;众多国内企业都涉及到海外贸易业务&#xff0c;尤其是出海电商得到蓬勃发展。企业做出海电商&#xff0c;需要访问国外网页、社交平台&#xff0c;如亚马逊、TikTok、Facebook、YouTube等与客户沟通互动&#xff0c;SD-WAN的发展正好为解决国际网络访问…

时序分析相关考题汇总

时序分析例题_如下一个分频电路,触发器建立时间tsu 2ns,保持时间thold 2ns,逻辑延时tq -CSDN博客 IC/FPGA笔试/面试题分析&#xff08;七&#xff09;建立时间和保持时间类型考题汇总分析_建立时间 保持时间 笔试题-CSDN博客

Qt(十二)Graphics View 绘图架构(三)

文章目录 一、QGraphicsView相关整理二、QGraphicsView架构下实时鼠标绘制图形2.1 鼠标拖拽绘图说明2.2 记录图形第一个绘制点2.3 实时获取鼠标最新位置并绘图2.4 释放绘制点&#xff0c;绘制最终图形 三、QGraphicsView 在鼠标点击处进行放大缩小 一、QGraphicsView相关整理 …

14 Php学习:表单

表单 PHP 表单是用于收集用户输入的工具&#xff0c;通常用于网站开发。PHP 可以与 HTML 表单一起使用&#xff0c;用于处理用户提交的数据。通过 PHP 表单&#xff0c;您可以创建各种类型的表单&#xff0c;包括文本输入框、复选框、下拉菜单等&#xff0c;以便用户可以填写和…

孩子不爱学习的解决办法?最佳回答

孩子说不想上学了&#xff0c;想必这句话很多父母都不陌生&#xff0c;从自家孩子嘴里听到过。孩子十三岁了&#xff0c;正是叛逆的时候&#xff0c;很多孩子会在这个时候出现不爱读书的情况&#xff0c;面对这样的情况&#xff0c;家长要保持冷静&#xff0c;采取合理的解决办…

主存储器与CPU之间的连接(会画图)

位扩展 字扩展 由于只有A13&#xff0c; A14 连到了译码器上&#xff0c;以、因此该译码器是一个 2/4 译码器&#xff0c;对应的选片有四种。选中第一个选片&#xff0c;就是把译码器“0口置0&#xff0c; 1~3口置1”&#xff0c;因为CS有非号&#xff0c;因此&#xff0c;低电…

数据结构——线索树

核心思路就是要先将空指针转为线索 也就是多出来的n1个指针&#xff0c;然后再将这些指针连成一个链表&#xff0c;遍历就可以达到O(n&#xff09;的速度打出 以下代码为中序遍历 前序和后续随缘更新 #include <iostream> #include <stdlib.h> using namespace s…

【C++】string的使用

目录 1、为什么学习string类&#xff1f; 2、标准库中的string类 2.1 string类 2.2 string类的常见接口声明 2.2.1 string类的常见构造 ​编辑 2.2.2 string类对象的访问及遍历操作 2.2.3 string类对象的容量操作 2.2.4 string类对象的修改操作 ​编辑 1、为什么学习s…

npm install CERT_HAS_EXPIRED解决方法

目录 一、问题描述二、问题原因三、解决方法 一、问题描述 执行命令 npm install 报错&#xff1a; npm WARN registry Unexpected warning for https://registry.npm.taobao.org/: Miscellaneous Warning CERT_HAS_EXPIRED: request to https://registry.npm.taobao.org/js-…

excel中vlookup查找值必须在table_array的第一列,有其他办法吗有XLOOKUP

vlookup查找值必须在table_array的第一列&#xff0c;有其他办法吗&#xff1f;有XLOOKUP。 vlookup 查找如下&#xff0c;查找值必须在table_array的第一列 如果下面&#xff0c;编码和名称交换位置&#xff0c;就不能使用vlookup查找了。 XLOOKUP 查找如下

Linux:进程调度

Linux&#xff1a;进程调度 进程优先级查看优先级调整优先级 Linux 2.6 内核进程调度队列 进程优先级 查看优先级 在Linux中&#xff0c;进程是有优先级的&#xff0c;我们可以通过指令ps -la来查看&#xff1a; 其中PRI表示priority优先级&#xff0c;在Linux中&#xff0c;…

算法章节目录

​​​​​​0 决策树基础-CSDN博客 1 GBDT:梯度提升决策树-CSDN博客 2 逻辑斯蒂回归&#xff08;分类&#xff09;-CSDN博客 3 xgboost-CSDN博客 4 lightGBM-CSDN博客 5 CatBoost模型-CSDN博客 6 tabNet: 堪比xgboost的深度学习模型-CSDN博客 7 Transform结构-CSDN博客

Hive:日期函数

1、to_date&#xff1a;日期时间转日期函数 select to_date(2015-04-02 13:34:12);2015-04-022、from_unixtime&#xff1a;转化unix时间戳到当前时区的时间格式 语法: from_unixtime(bigint unixtime[, stringformat]) 返回值: string 说明: 转化UNIX时间戳&#xff08;从197…