首页 > 其他分享 >2024-04-18---中等题---无重复字符的最长子串(滑动窗口)

2024-04-18---中等题---无重复字符的最长子串(滑动窗口)

时间:2024-04-18 20:33:29浏览次数:17  
标签:map 窗口 04 int 18 --- length result left

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

题目:

image

思路:

一 暴力法:

  1. 特殊情况,长度为0或者1

  2. 声明每次位置的最大长度,和最大的最大值(返回值)

  3. 双层循环,有点暴力

二 滑动窗口:

基本概念:维持一个窗口(可以理解为队列),当新进来的元素与前面的重复,则把重复的元素及之前的元素全部忽略(可以理解为移出队列)。也就形成了窗口在字符串上平滑移动。

本题思路:

  1. 特殊情况,长度为0返回0

  2. 新建一个Map<Character,Integer> map,用来查重和移动窗口

  3. 初始化result,left为0.result记录返回的最大长度,left记录窗口的起始位置。

  4. 一次遍历:当有重复,更新left

    ​ 否则put当前数据,并返回更大的值给result.

  5. 遍历结束,返回结果

先看思路,不看代码去实现,实现后再看。

代码:

暴力法

public int lengthOfLongestSubstring(String s) {
        if(s.length()==0) return 0;
        if(s.length()==1) return 1;
        int maxLength = 0;
        int result = 1;
        for (int i = 0; i < s.length(); i++) {
            HashSet set = new HashSet();
            set.add(s.charAt(i));
            maxLength=1;
            for (int j = i+1; j <s.length() ; j++) {
                if(!set.contains(s.charAt(j))){
                    set.add(s.charAt(j));
                    maxLength++;
                    result = Math.max(maxLength,result);
                }else {
                    break;
                }
            }
        }
        return result;
    }

滑动窗口:

public int lengthOfLongestSubstring1(String s) {
    if(s.length()==0) return 0;
    Map<Character,Integer> map = new HashMap<Character,Integer>();
    int result=0;
    int left = 0;
    for (int i = 0; i < s.length(); i++) {
        if(map.containsKey(s.charAt(i))){
            left = Math.max(left,map.get(s.charAt(i))+1);
        }
        map.put(s.charAt(i),i);
        result = Math.max(result,i-left+1);
    }
    return result;
}

标签:map,窗口,04,int,18,---,length,result,left
From: https://www.cnblogs.com/leleChang/p/18144355

相关文章

  • 栈5-后缀表达式求解
    栈5-后缀表达式的求解求解过程831-5*+数字:进栈[1,3,8]符号:-从栈中弹出右操作数-1从栈中弹出左操作数3-1根据符号进行运算2将运算结果压入栈中[2,8]遍历结束,栈中唯一的数字作为计算结果定义栈结构typedefstructMYNUM{LinkNodenode;int......
  • MySQL-8.0.33-winx64 解压版安装 [Windows]
    1、下载安装包mysql-8.0.33-winx64.ziphttps://dev.mysql.com/downloads/file/?id=5182202、安装解压mysql-8.0.33-winx64.zip(至:C:\app\mysql-8.0.33-winx64);创建my.ini文件;默认解压目录无my.ini文件,需自己创建;进入目录C:\app\mysql-8.0.33-winx64,创建my.ini,文件内容......
  • 实验一-原型设计 微信卡包页面
    微信卡包页面-原型设计分享一、实验题目:原型设计二、实验目的:掌握产品原型设计方法和相应工具使用。三、实验要求 对比分析墨刀、Axure、Mockplus等原型设计工具的各自的适用领域及优缺点(至少3条)。1.墨刀:  ~适用领域:墨刀适用于快速原型设计和协作,特别是在移动应用和网页......
  • “百度杯”CTF比赛 九月场-123
    “百度杯”CTF比赛九月场123题目类型:web题目描述:12341234,然后就解开了,打开靶机是一个会员登陆界面:解题方法:先查看一下网页源码:这里说用户信息都在user.php里面,然后我们访问一下user.php:发现并没有任何信息扫描一下它的目录文件看一下:扫出了一个user.php和view.php,但......
  • 20240416
    T1TopcoderSRM573div1Medium-SkiResorts一定存在一种方案使得最终所有高度都是原高度序列中出现过的数。考虑倒着来,\(dp[i][j]\)表示\(i\)高度变成原来\(j\)的高度之后能够从\(n\)到达的最小代价。转移是简单的,但是需要使用dijkstra。代码#include<iostream......
  • 10-进程管理
    10.4监视进程:ps命令psaux命令产生进程信息的各字段的含义字  段含  义USER进程创建者的用户名PID进程的ID号%CPU进程占用的CPU百分比%MEM进程占用的内存百分比VSZ进程占用的虚拟内存大小RSS内存中页的数量(页是管理内存的单位,在PC上通常为4K)TTY进程所......
  • 2024.04.18每日收获之联合体结构体内存分配
    今日学习组内前辈留下的代码,数码管动态扫描显示,发现前辈们用的是联合体定义扫描引脚,如:typedefunion{unsignedchara[2];typedefstruct{unsignedchardata0;unsignedchardata1;}data;}seg;此时数组a[2]和结构体里的data0和data1共用地址空间,修改数组或者data会产生相......
  • 7-03. 实现数据存储和加载的逻辑
    给NPC增加GUIDNPC_Girl02和NPC_Girl01也同样增加DataGUID修改NPCMovement创建DataSlot修改SaveLoadManagerpersistentDataPath对应的文件路径暂时先不写UI,用键盘来进行交互修改TransitionManager卸载UI场景修改TransitionManager......
  • Trino418版本动态加载catalog不需要重启集群修改思路及实现2
       原来没事的时候改了一个这样的功能,当时也没有仔细研究,后来也没继续弄。详细可以参考 https://www.cnblogs.com/liuzx8888/p/17635913.html当时有1个问题:新增数据源需要每一个节点都去调取API注册,这样非常麻烦,最近闲下来又研究了一下,在原先的基础上做了一些改造。具体流......
  • 毕业设计记录-1
    设计app界面......