【CT】LeetCode手撕—3. 无重复字符的最长子串

目录

  • 题目
  • 1- 思路
    • 1-1 模式1:涉及去重判断
    • 1-2 模式2:遍历字符串区间
  • 2- 题解
      • ⭐无重复字符的最长子串——题解思路
  • 3- ACM实现


  • 原题链接:3. 无重复字符的最长子串

题目

  • 无重复字符的最长子串
    给定一个字符串 s ,请你找出其中不含有重复字符的 **最长 子串 **的长度。
    示例 1:

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

示例 2:

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

示例 3:

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

在这里插入图片描述


1- 思路

  • 题型哈希表字符串滑动窗口
  • 需要遍历每个子串,判断当前 位 的元素是否在已出现的子串中重复,若重复则从头开始计数

1-1 模式1:涉及去重判断

  • 根据模式1 ——> 需要一个数据结构实现两个方面:
    • 存储已经遍历的字符串
    • 去重操作
      在这里插入图片描述

1-2 模式2:遍历字符串区间

  • 根据模式2 ——> 遍历字符串区间 ——> 双指针实现滑动窗口
    在这里插入图片描述

2- 题解

⭐无重复字符的最长子串——题解思路

在这里插入图片描述

class Solution {
    public int lengthOfLongestSubstring(String s) {
        // 1. 哈希表去重
        HashSet<Character> hs = new HashSet<>();

        // 2. 双指针
        int right = -1;
        int res = 0;

        // 遍历s
        for(int i = 0 ; i < s.length();i++){

            // 2-2 左指针移动
            if(i!=0){
                hs.remove(s.charAt(i-1));
            }
            // 结果收集
            while(right+1 < s.length() && !hs.contains(s.charAt(right+1))){
                hs.add(s.charAt(right+1));
                right++;
            }
            res = Math.max(res,hs.size());
        }
        return res;
    }
}

3- ACM实现

package Daily_LC.Month6_Week1.Day84;

import java.util.HashSet;
import java.util.Scanner;


public class lengthOfLongestSubstring {


    public static int longestSubstring(String s){
        // 1 数据结构
        HashSet<Character> hs = new HashSet<>();

        // 2- 双指针
        int right = -1;
        int res = 0;

        // 2-1 遍历
        for(int i = 0 ; i < s.length();i++){
            // 2-2 左指针移动
            if(i!=0){
                hs.remove(s.charAt(i-1));
            }
            // 2-3 for 遍历
            while(right+1<s.length() && !hs.contains(s.charAt(right+1))){
                hs.add(s.charAt(right+1));
                right++;
            }
            res = Math.max(res,hs.size());
        }
        return res;
    }


    // 输入一个字符串
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String str = sc.nextLine();
        System.out.println(longestSubstring(str));
    }

}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

kubernetes负载均衡---MetalLB

https://github.com/metallb/metallb 参考 &#xff1a; https://mp.weixin.qq.com/s/MBOWfcTjFMmgJFWw-FIk0Q 自建的Kubernetes集群&#xff0c;默认情况下是不支持负载均衡的。当需要提供服务的外部访问时&#xff0c;可使用 Ingress、NodePort等方式。他们都存在一些问题 …

python基础篇(1):type()

1 type()函数 type()函数是Python内置的函数之一&#xff0c;它用于获取一个对象的数据类型。 一般语法如下&#xff1a; type(object) 其中&#xff0c;object是您要检查其类型的变量或对象。type()函数将返回一个表示对象类型的类型对象。 2 使用方式 &#xff08;1&…

C语言中指针的说明

什么是指针&#xff1f; 在C语言当中&#xff0c;我们可以将指针理解为内存当中存储的地址&#xff0c;就像生活当中&#xff0c;一个小区里面&#xff0c;在小区里面有很单元&#xff0c;每一栋单元&#xff0c;单元内的房间有着不同的房间号&#xff0c;我们可以同过几栋几单…

推荐系统学习 一

参考&#xff1a;一文看懂推荐系统&#xff1a;召回08&#xff1a;双塔模型——线上服务需要离线存物品向量、模型更新分为全量更新和增量更新_数据库全量更新和增量更新流程图-CSDN博客 一文看懂推荐系统&#xff1a;概要01&#xff1a;推荐系统的基本概念_王树森 小红书-CSD…

【Linux基础】安装nginx

【Linux基础】安装nginx 文章目录 【Linux基础】安装nginx1、下载nginx2、安装nginx3、使用nginx4、配置nginx环境变量 1、下载nginx 在Nginx的官网的下载页面中(http://nginx.org/en/download.html)&#xff0c;就展示了当前Nginx版本&#xff0c;并提供了下载的连接。 如下&a…

学习笔记——路由网络基础——静态路由(static)

三、静态路由(static) 1、静态路由 (1)定义 静态路由(Static)&#xff1a;由管理员手动配置和维护的路由。静态路由配置简单&#xff0c;被广泛应用于网络中。此外还可以实现负载均衡和路由备份。 静态路由默认优先级为60&#xff0c;如果想在多条静态路由中让某条路由优选…

深入探索AliExpress API接口:技术实现与代码示例

AliExpress API是阿里巴巴集团为开发者提供的一套开放接口&#xff0c;它允许开发者通过编程方式访问AliExpress平台的数据&#xff0c;如商品信息、订单数据、物流信息等。API支持多种编程语言&#xff0c;包括Java、Python、PHP等&#xff0c;同时提供了丰富的API接口和详尽的…

LLM的基础模型5:Embedding模型

大模型技术论文不断&#xff0c;每个月总会新增上千篇。本专栏精选论文重点解读&#xff0c;主题还是围绕着行业实践和工程量产。若在某个环节出现卡点&#xff0c;可以回到大模型必备腔调或者LLM背后的基础模型新阅读。而最新科技&#xff08;Mamba,xLSTM,KAN&#xff09;则提…

告别拥堵:SpringBoot+消息队列打造你的专属交通指挥家!

随着5G和物联网技术的飞速发展&#xff0c;系统的智能化已成为不可逆转的趋势。带你一窥未来&#xff0c;探索如何通过SpringBoot和消息队列技术的结合&#xff0c;开启智能系统的新纪元。从事件驱动架构的实现&#xff0c;到异步消息处理的最佳实践&#xff0c;再到集成主流消…

PyQt5+SQLlite3基于邮箱验证的登陆注册找回系统

本期教程投稿一篇实用性的基于邮箱登陆注册找回于一体的系统&#xff0c;在日常的开发和软件应用中非常常见&#xff0c;并且也使用了逻辑与界面分离的写法&#xff0c;那这个文章将详细的为大家介绍整个流程&#xff0c;但是细节的话还需要大家自己去完善&#xff0c;也欢迎大…

传输大咖24|镭速传输揭秘:确保UDP数据完整性的先进策略

在现代网络通信中&#xff0c;UDP&#xff08;User Datagram Protocol&#xff09;因其低延迟和高效率的特点而受到青睐&#xff0c;尤其是在需要快速传输大量数据的场景中。然而&#xff0c;UDP协议本身并不保证数据的可靠性和一致性&#xff0c;这就要求使用UDP进行数据传输的…

泛微开发修炼之旅--06自定义Action接口开发示例、源码及使用场景

文章链接&#xff1a;泛微开发修炼之旅--06自定义Action接口开发示例、源码及使用场景

关于序列化与反序列化解题(2)

1、 [NISACTF 2022]babyserialize 分析发现定义一个类&#xff0c;里面为两个对象赋值并调用__wakeup()魔术方法&#xff0c;用if语句//检查 $this->fun 是否等于 "show_me_flag"&#xff0c;如果是&#xff0c;则调用 hint() 函数。 当对象的方法不存在时&#x…

Threejs加载DOM+CSS到场景中,实现3D场景展示2D平面的效果

1. 前言 本篇文章主要实现了将DOM元素转换为Threejs可以使用的数据结构,使用CSS2DRenderer渲染器渲染这些DOMCSS的平面,使其可以作为一个物体添加到Threejs场景里 如下效果图: 2. 实现步骤 首先创建一个ThreejsVueVite的项目,作为本次的demo项目下载Threejs第三方库 yarn…

力扣hot100:25. K 个一组翻转链表

LeetCode&#xff1a;25. K 个一组翻转链表 这个题很像24. 两两交换链表中的节点 和 206. 反转链表 的合并体。 在力扣hot100&#xff1a;24. 两两交换链表中的节点中我们使用递归来实现这个问题是很方便的&#xff0c;使用迭代在k个结点一组时就不太好使了&#xff0c;我们可…

谷粒商城实战(032 业务-秒杀功能3)

Java项目《谷粒商城》架构师级Java项目实战&#xff0c;对标阿里P6-P7&#xff0c;全网最强 总时长 104:45:00 共408P 此文章包含第319p-第p325的内容 秒杀首页编写 预告秒杀信息 创建action请求 创建service 模糊查询 使用*号 ps:redis单线程&#xff0c;你用keys会阻塞一…

温补晶振TG5032SGN专用于无线通信设备应用

随着无线通信技术的快速发展&#xff0c;设备对时钟源的精度和稳定性的要求越来越高。爱普生温补晶振&#xff08;TCXO&#xff09;TG5032SGN因其优异的性能&#xff0c;成为无线通信设备中不可或缺的关键组件。TG5032SGN采用紧凑的封装设计&#xff0c;非常适合集成到各种无线…

Linux---进程/磁盘管理

文章目录 目录 文章目录 一.Linux中进程的概念 二.显示系统执行的进程 2.1: ps 命令 2.2 top 命令 三.终止进程 四.磁盘分区 一.Linux中进程的概念 在Linux中&#xff0c;进程是指操作系统中正在执行的程序的实例。每个进程都由操作系统分配了独立的内存空间&#xff0c;用于…

hadoop配置nfs,window映射nfs

1.修改hadoop配置如下内容,并同步到其它节点 core-site.xml新增配置项 <!-- 允许hadoop用户代理任何其它用户组 --><property><name>hadoop.proxyuser.hadoop.groups</name><value>*</value></property><!-- 允许代理任意服务器…

TypeScript的never类型的妙用

never类型介绍 在 TypeScript 中&#xff0c;"never" 是一个表示永远不会发生的值类型。 使用场景 "never" 类型通常用于以下几种情况&#xff1a; 1、函数返回类型&#xff1a;当一个函数永远不会返回任何值&#xff08;比如抛出异常或者无限循环&…