【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;// 遍历sfor(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));}}

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

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

相关文章

裸芯片绑定键合电阻器

EAK厚膜阻芯与有源裸片键合在一起封装 一般说明 精密引线键合电阻具有极高的稳定性和可靠性。电阻器经过激光微调&#xff0c;达到严格的公差。可定制值和该值的唯一标记&#xff0c;非常适合但不限于混合电路应用。 潜在作用&#xff1a; 医用植入式 军事/国防 混合设计 …

搭建chattts应用,做文字转语音

下载代码 git clone https://github.com/2noise/ChatTTS.git下载endpoint并上传&#xff1a; https://huggingface.co/2Noise/ChatTTS/tree/main 将上面下载的文件上传到服务器上 修改webui.py 更改为本地模型地址 import os import random import argparseimport torch i…

dpdk-19.11 arm64 环境适配 Mellanox CX4 网卡

环境信息 cpu: arm64 架构 dpdk 版本&#xff1a;19.11 glibc 版本&#xff1a;2.17 网卡型号&#xff1a; Mellanox CX4 网卡&#xff0c;详细 pci 信息如下&#xff1a; 02:00.0 Ethernet controller: Mellanox Technologies MT27710 Family [ConnectX-4 Lx] 02:00.1 Ether…

一份最基础的gitlab-ci文件,其中就maven的build和test

说明的gitlab-ci.yml文件&#xff0c;包含注释解释每个部分的功能&#xff1a; # 定义流水线的各个阶段&#xff0c;包含两个阶段&#xff1a;build 和 test stages:- build- test# 设置Maven的环境变量&#xff0c;指定本地仓库位置 variables:MAVEN_OPTS: "-Dmaven.rep…

java-String 比较

在 Java 中&#xff0c;String 类的对象用于表示字符串。字符串比较是编程中常见的需求&#xff0c;比如判断两个字符串是否相等&#xff0c;或者比较两个字符串的大小等。Java 提供了多种方法来比较 String 对象。 ### 字符串比较的方式 #### 1. 使用 运算符 运算符用于比较…

投资少见效快产量高-UMLChina建模知识竞赛第5赛季第13轮

DDD领域驱动设计批评文集 做强化自测题获得“软件方法建模师”称号 《软件方法》各章合集 参考潘加宇在《软件方法》和UMLChina公众号文章中发表的内容作答。在本文下留言回答。 只要最先答对前3题&#xff0c;即可获得本轮优胜。 如果有第4题&#xff0c;第4题为附加题&am…

2024上海城博会:以绿色·节能·创新为主题,推动长三角一体化发展

2024上海城博会&#xff0c;作为“世界城市日”的重要主题活动之一&#xff0c;再次将全球的目光聚焦于这座东方明珠&#xff0c;展现了其在城市建设与管理领域的卓越成就。本次城博会由联合国人居署、上海市住房和城乡建设管理委员会联合主办&#xff0c;上海市绿色建筑协会承…

codereview时通常需要关注哪些

在团队成员之间互相进行代码审查&#xff08;codereview&#xff09;时&#xff0c;通常可以从以下几个方面来确保代码的质量和可维护性&#xff1a; 代码结构和格式&#xff1a; 检查代码是否遵循了项目约定的编码规范和风格指南。确保代码具有良好的可读性&#xff0c;比如合…

Qt 判断文件夹是否存在,不存在则创建

int CHttpFileRequest::CreatDownloadFile(QString path,QString fileName) {QDir mDir;if(!mDir.exists(path)){mDir.mkpath(path);}return 0; }

C语言字符函数与字符串函数详解

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 [TOC](文章目录) 前言一、针对单个字符的C语言库中的函数&#xff08;一&#xff09;、字符分类函数&#xff08;二&#xff09;、字符转换函数 二、针对字符串的C语…

opengauss创建和管理分区表

创建和管理分区表 背景信息 openGauss数据库支持的分区表为范围分区表、列表分区表、哈希分区表。 范围分区表&#xff1a;将数据基于范围映射到每一个分区&#xff0c;这个范围是由创建分区表时指定的分区键决定的。这种分区方式是最为常用的&#xff0c;并且分区键经常采用日…

Springboot 开发-- 集成 Activiti 7 流程引擎

引言 Activiti 7是一款遵循BPMN 2.0标准的开源工作流引擎&#xff0c;旨在为企业提供灵活、可扩展的流程管理功能。它支持图形化的流程设计、丰富的API接口、强大的执行引擎和完善的监控报表&#xff0c;帮助企业实现业务流程的自动化、规范化和智能化。本文将为您详细介绍 Ac…

Spring (39)微服务架构

微服务架构是一种将单个应用程序作为一套小服务开发的方法&#xff0c;每个服务运行在其自身的进程中&#xff0c;并且通常围绕业务能力构建&#xff0c;使用轻量级的通信机制&#xff08;常见的如HTTP RESTful API&#xff09;。这些服务是自包含的&#xff0c;因为它们分别持…

kubesphere报错

1.安装过程报错unable to sign certificate: must specify a CommonName [rootnode1 ~]# ./kk init registry -f config-sample.yaml -a kubesphere.tar.gz _ __ _ _ __ | | / / | | | | / / | |/ / _ _| |__ ___| |/…

pytest-playwright 插件的使用

引言 在自动化测试领域&#xff0c;Playwright 是一个强大的工具&#xff0c;它支持 Chromium、Firefox 和 WebKit 三大浏览器引擎。Playwright 提供了与 Pytest 集成的插件&#xff0c;使得编写端到端测试变得更加简单和高效。本文将介绍如何使用 Pytest Playwright 插件来编…

Git - 创建和应用patch

如何在 Git 中打补丁 创建和应用 Git 补丁需要几个步骤。以下是详细的操作指南&#xff1a; 创建 Git 补丁 修改&#xff1a; 首先&#xff0c;在本地仓库中进行您想要的修改。 保存修改&#xff1a; 使用 "git add "对更改进行暂存。例如 git add modified_file…

Leetcode:最长公共前缀

题目链接&#xff1a;14. 最长公共前缀 - 力扣&#xff08;LeetCode&#xff09; 普通版本&#xff08;横向扫描&#xff09; 主旨&#xff1a;用第一个字符串与后续的每个字符串进行比较&#xff0c;先获取S1和S2的最长公共前缀&#xff0c;然后将该次比较获得的最长公共前缀…

python中如何使用密码字典

使用itertools循环迭代的模块来实现生成密码字典&#xff0c;用这个模块可以省不少事。 首先要调用itertools。 import itertools as its 然后将字典需要的元素&#xff08;或者说是关键字&#xff09;赋给word变量。 我们这里假设密码是纯数字&#xff0c;所以元素就是12345…

创新指南|2024企业如何开启生成式AI创新?从5大应用场景和6步抓手

想要了解如何采用生成式AI来提高企业效率和竞争力&#xff1f;本指南将介绍如何采用生成式AI来实现数字化转型&#xff0c;并打造智能化商业模式。从5大应用场景和6大步骤切入&#xff0c;让您了解如何开启生成式AI创新。立即连线创新专家咨询或观看创新战略方案视频进一步了解…

test2042

语义边缘检测和语义分割的区别 语义边缘检测&语义分割 Semantic Edge Detection vs. Semantic Segmentation 区别difference 任务目标 Task Objective 语义边缘检测 Semantic Edge Detection 识别图像中不同物体之间的边界线或轮廓及语义类别 Identifying the boundaries …