3. 无重复字符的最长子串(滑动窗口)

news2025/1/12 21:56:05

文章目录

  • 题目描述
  • 暴力破解
  • 滑动窗口优化
  • 知识积累
  • 待解决

题目描述

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

示例 1:

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

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

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

提示:

0 <= s.length <= 5 * 104
s 由英文字母、数字、符号和空格组成

暴力破解

自己的解法,从第一个字符开始,一次往后对比,如果字符没有在str中出现过,就把这个字符加到str,一次又一次的循环,最终得出最大的res。这里要注意的是如果给定的字符串中含有空格,一开始要将res初始为1,这里主要是有一个疑问是charAt能识别出空格吗?
在这里插入图片描述

class Solution {
    public int lengthOfLongestSubstring(String s) {
        int len=s.length();
        int res=0;
        int flag=0;
        for(int i=0;i<s.length();i++){
            if(s.charAt(i)==' '){
                flag=1;
                break;
            }
        }
        if(flag==1)
            res=1;

        for(int i=0;i<len;i++){
             String str="";
             str=str+s.charAt(i);
            for(int j=i+1;j<len;j++){
                boolean flg=false;
                for(int k=0;k<str.length();k++){
                    if(str.charAt(k)==s.charAt(j)){
                        flg=true;
                    }               
                }
                if(flg==false){
                     char c=s.charAt(j);
                     str=str+c;
                    
                }else{
                    break;
                }
            }
             res= str.length()>res?str.length():res;
            
        }
        return res;
    }
}

滑动窗口优化

思路:用两个下标left和right将一个字串框起来,依次将right右移,如果rightChar字符已经在window里面出现过了,就记录此时窗口长度,同时把leftChar剔除窗口,再把rightChar加进来判断右边界是否已经在窗口中出现了。这样一次有一次往右滑动窗口,直到最右边将字符串全部包含为止。
在这里插入图片描述

class Solution {
    public int lengthOfLongestSubstring(String s) {
        int len=s.length();
        int left=0;
        int right=0;

        int maxLen=0;

        Set<Character> window=new HashSet<>();
        while(right<len){
            char rightChar=s.charAt(right);
            while(window.contains(rightChar)){//?2
                window.remove(s.charAt(left));
                left++;
            }
            maxLen=Math.max(maxLen,right-left+1);//+1是因为下标是从0开始的
            window.add(s.charAt(right));
            right++;
        }
        return maxLen;
    }
}

知识积累

if (allUnique(s, i, j)) {
maxLen = Math.max(maxLen, j - i + 1);
}
主要是这个函数allUnique(s, i, j)可以判断一个字符串区间内的字符串是不是唯一的,也就是是不是各不相同的。
运用此函数可以对代码进行一些优化。

待解决

1.charAt能识别出空格吗?

2.while(window.contains(rightChar)){//???
这里为什么就将字串包含在滑动窗口里面了啊,还没学到hash,所以这里面是有什么知识点我还不了解吗?等到后期再回头来解决。

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

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

相关文章

python 操作符介绍

python操作符分类&#xff1a;算数操作符&#xff1b;比较操作符&#xff1b;逻辑操作符&#xff1b;成员操作符&#xff1b;身份操作符&#xff1b; 1 算数操作符&#xff1a; 常用的算数操作符&#xff1a;; python如何执行除法&#xff1a; 许多编程语言中整数除法执行的…

另一半人马座,孟庭苇

我写过生于12月25日的半人马座桂纶镁《半人马座&#xff0c;桂纶镁》。射手座是11月23日-12月21日。而摩羯座的开始恰恰是&#xff1a;12月22日。而孟庭苇&#xff0c;恰恰就生于12月22日。她更是半人马座啊。1989年&#xff0c;20岁的孟庭苇出演铃木机车广告出道&#xff08;没…

分享一套响应式自适应公司网站官网源码,带文字搭建教程

分享一套响应式自适应公司网站官网源码&#xff0c;带文字搭建教程。需要源码学习可私信我。 技术架构 PHP7.2 nginx mysql5.7 JS CSS HTML cnetos7以上 宝塔面板 系统介绍 1、四网合一企业网站管理系统支持在线升级&#xff08;支持跨版本&#xff09;、插件在线安装、系…

跳表SkipList介绍与实现

目录 一.跳表介绍 二.实现思路 &#xff08;一&#xff09;.结点结构 &#xff08;二&#xff09;.检索 &#xff08;三&#xff09;.插入 &#xff08;四&#xff09;.删除 三.实现代码 一.跳表介绍 跳表是一种随机化数据结构&#xff0c;主要用于快速检索数据。实质上…

JavaScript 函数

文章目录JavaScript 函数JavaScript 函数语法调用带参数的函数带有返回值的函数局部 JavaScript 变量全局 JavaScript 变量JavaScript 变量的生存期向未声明的 JavaScript 变量分配值笔记列表JavaScript 函数 函数是由事件驱动的或者当它被调用时执行的可重复使用的代码块。 实…

Go语言之容器总结

目录 1.值类型 1.1. 数组Array 数组遍历 数组初始化 值拷贝 内置函数len、cap 2. 引用数据类型 2.1. 切片slice 切片初始化 切片的内存布局 通过slice修改struct array值 用append内置函数操作切片&#xff08;切片追加&#xff09; slice自动扩容 slice中cap重新…

基于yolov5算法的安全帽头盔检测源码+模型,Pytorch开发,智能工地安全领域中头盔目标检测的应用

基于yolov5算法的安全帽头盔检测|Pytorch开发源码模型 本期给大家打开的是YOLOv5在智能工地安全领域中头盔目标检测的应用。 完整代码下载地址&#xff1a;基于yolov5算法的安全帽头盔检测源码模型 可视化界面演示&#xff1a; &#x1f4a5;&#x1f4a5;&#x1f4a5;新增…

opencv c++ Mat CUDA的编译与使用

Mat 构造函数 cv::Mat img ; //默认 定义了一个Mat img cv::imread("image.jpg");//除了直接读取&#xff0c;还有通过大小构造等cv::Mat img cv::imread("image.png", IMREAD_GRAYSCALE); cv::Mat img_novel img;转换 Mat::convertTo(Mat& m, in…

【自学Java】Java方法

Java方法 Java方法教程 在 Java 语言 中&#xff0c;方法就是一段可重复调用的代码段。在平时开发直接交流中&#xff0c;也有一些同学喜欢把方法叫做函数&#xff0c;这两个其实是一个概念。 Java语言方法详解 语法 public void fun(Object param1,...){//do something }…

多线程与高并发(四)

【Exchanger】&#xff1a; package Ten_Class.t04.no139;import java.util.concurrent.Exchanger;public class T12_TestExchanger {static Exchanger<String> exchanger new Exchanger<>();public static void main(String[] args) {new Thread(() -> {Stri…

实验二十四 策略路由配置

实验二十四 策略路由配置实验要求&#xff1a; 某企业通过路由器AR1连接互联网&#xff0c;由于业务儒要&#xff0c;与两家运营商ISPA和ISPB相连。 企业网内的数据流从业务类型上可以分为两类&#xff0c; 一类来自于网络172.16.0.0/16&#xff0c;另 一类 来自于网络172.17.0…

百趣代谢组学分享:黑木耳多糖对小鼠肠道微生物及代谢表型的影响

文章标题&#xff1a;Effects of Auricularia auricula Polysaccharides on Gut Microbiota and Metabolic Phenotype in Mice 发表期刊&#xff1a;Foods 影响因子&#xff1a;5.561 作者单位&#xff1a;西北大学 百趣提供服务&#xff1a;发现代谢组学Standard-亲水版、1…

dataCompare大数据对比之异源数据对比

在从0到1介绍一下开源大数据比对平台dataCompare 已经详细介绍了dataCompare 的功能&#xff0c;目前dataCompare 已经实现同源数据的对比 一、dataCompare 现有核心功能如下&#xff1a; (1)数量级对比 (2)一致性对比 (3)差异case 自动发现 (4)定时调度自动对比数据 二、…

【个人解答版】笔试题-2023禾赛-FPGA

题目背景 笔试时间&#xff1a;2022.06.22应聘岗位&#xff1a;FPGA开发工程师 题目评价 难易程度&#xff1a;★★☆☆☆知识覆盖&#xff1a;★☆☆☆☆超纲范围&#xff1a;☆☆☆☆☆值得一刷&#xff1a;★☆☆☆☆ 文章目录1. 使用最少的电路实现二分频&#xff0c;给出…

《机器学习实战》chap1 机器学习概览

《机器学习实战》chap1 机器学习概览 Chap1 The Machine Learning Landscape 这本书第三版也已经出版了:https://github.com/ageron/handson-ml3 Hands-on Machine Learning with Scikit-Learn,Keras & TensorFlow 引入 很早的应用&#xff1a;光学字符识别(OCR&#xff0…

远程办公之怎样在外网登录在线答题网站

很多学校或企业因为教学、测试需要&#xff0c;为学生或员工提供了在线答题平台网站&#xff0c;但弊端是这种在线答题平台只能在校内或在企业内网访问使用&#xff0c;在外网是无法登录访问的。在无公网Ip服务器上部署的web&#xff0c;默认情况下只能内网访问&#xff0c;公网…

TLE4943C/CH505C轮速传感器芯片的输出协议介绍

Infineon公司的TLE4943是一款集成式有源磁场传感器&#xff0c;适用于基于霍尔技术的车轮速度应用。它的基本功能是测量磁极轮或铁磁齿轮的速度。它具有使用AK协议进行通信的两线电流接口。该协议除了提供速度信号外&#xff0c;还提供其他信息&#xff0c;如车轮旋转方向和气隙…

java安装教程-windows

检查是否已经安装过jav打开cmd命令窗口 输入 java -v下载java安装包网址&#xff1a;https://www.oracle.com/java/technologies/downloads/安装java双击运行程序jdk-19_windows-x64_bin.exe&#xff0c;点击下一步进行安装可以更改安装路径&#xff0c;注意安装路径不能有中文…

【TypeScript】TS类型守卫(六)

&#x1f431;个人主页&#xff1a;不叫猫先生 &#x1f64b;‍♂️作者简介&#xff1a;前端领域新星创作者、华为云享专家、阿里云专家博主&#xff0c;专注于前端各领域技术&#xff0c;共同学习共同进步&#xff0c;一起加油呀&#xff01; &#x1f4ab;系列专栏&#xff…

独立开发变现周刊(第86期):月收入4000美元的日程规划器

分享独立开发、产品变现相关内容&#xff0c;每周五发布。目录1、NotionReads: 在Notion中管理你的阅读书籍2、Zaap.ai: 面向创作者的一站式工具3、microfeed: 开源的可自我托管的轻量级内容管理系统(CMS)4、Reactive Resume&#xff1a;一个免费的开源简历生成器5、一个月收入…