Leetcode JAVA刷刷站(3)无重复字符的最长子串

news2025/2/24 1:46:15

 一、题目概述

二、思路方向

       为了找出给定字符串中不含有重复字符的最长子串的长度,我们可以使用滑动窗口的方法。这种方法通过维护一个窗口(或称为子串),并动态地调整窗口的左右边界来找到最长的无重复字符子串。

三、代码实现 

public class Solution {  
    public int lengthOfLongestSubstring(String s) {  
        int n = s.length();  
        if (n == 0) return 0;  
  
        // 使用HashMap来存储字符及其最近出现的位置  
        Map<Character, Integer> map = new HashMap<>();  
        int maxLength = 0; // 最长无重复字符子串的长度  
        int left = 0; // 窗口左边界  
  
        for (int right = 0; right < n; right++) {  
            char c = s.charAt(right);  
            // 如果字符c已经在map中,并且其位置在窗口内(即大于等于left),则移动左边界  
            if (map.containsKey(c) && map.get(c) >= left) {  
                left = map.get(c) + 1;  
            }  
            // 更新字符c的最新位置  
            map.put(c, right);  
            // 更新最长无重复字符子串的长度  
            maxLength = Math.max(maxLength, right - left + 1);  
        }  
  
        return maxLength;  
    }  
  
    public static void main(String[] args) {  
        Solution solution = new Solution();  
        String s = "abcabcbb";  
        System.out.println("Length of longest substring without repeating characters: " + solution.lengthOfLongestSubstring(s));  
    }  
}

解释

  1. 初始化:我们初始化一个HashMap来存储每个字符最近一次出现的位置,以及一个变量maxLength来记录最长无重复字符子串的长度。我们还设置两个指针leftright来定义当前考虑的子串的边界。

  2. 遍历字符串:我们使用right指针遍历字符串的每个字符。对于每个字符,我们检查它是否已经在HashMap中,并且其位置是否在当前的窗口内(即大于等于left)。如果是,我们需要移动left指针到该字符上一次出现位置的下一个位置,以确保窗口内没有重复字符。

  3. 更新HashMap和maxLength:然后,我们更新HashMap中当前字符的位置为right,并检查是否需要更新maxLength

  4. 返回结果:遍历完成后,maxLength将包含最长无重复字符子串的长度,我们将其返回。

执行结果: 

四、小结

       这种方法的时间复杂度是O(n),因为我们只遍历了字符串两次(一次是right指针,一次是可能的left指针移动),而HashMap的插入和查找操作都是O(1)的。空间复杂度也是O(min(m, n)),其中m是字符集的大小(对于ASCII字符集,m=128),n是字符串的长度。在最坏的情况下,我们需要存储字符串中的所有不同字符。然而,由于字符集通常远小于字符串长度,因此可以认为空间复杂度是O(min(m, n)),但在实际应用中,它通常接近O(m)。

 结语

勇气不是没有恐惧,而是即便恐惧也依然前行

信心不是没有疑虑,而是即便疑虑也依然坚持

!!!

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

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

相关文章

利用自然语言处理(NLP)技术挖掘旅游评论数据

目录 简单了解 延伸 如何使用自然语言处理技术提高旅游评论情感倾向的准确性&#xff1f; 旅游评论数据中多模态信息融合的最佳实践是什么&#xff1f; 在旅游评论数据预处理和清洗过程中&#xff0c;哪些方法最有效&#xff1f; 使用Python网络爬虫技术进行旅游评论数据的…

便携式气象监测设备:精准掌握自然气象变化

在探索自然、指导农业生产、保障户外活动安全以及进行科学研究等多个领域&#xff0c;便携式气象监测设备正逐渐成为重要的工具。这些小巧而强大的设备&#xff0c;以其便携性、实时性和高精度&#xff0c;让我们能够轻松掌握周围环境的微妙变化。 便携式气象监测设备集成了多种…

35 搜索插入位置

解题思路&#xff1a; \qquad 时间复杂度要求为O(Log N)&#xff0c;可知此题用二分查找解决。 \qquad 二分基本思路是&#xff0c;通过锚定一个中间值mid&#xff0c;把搜索区间一分为二&#xff0c;根据mid与目标值的比较结果&#xff0c;更新下一次搜索区间&#xff08;左…

Java | Leetcode Java题解之第330题按要求补齐数组

题目&#xff1a; 题解&#xff1a; class Solution {public int minPatches(int[] nums, int n) {int patches 0;long x 1;int length nums.length, index 0;while (x < n) {if (index < length && nums[index] < x) {x nums[index];index;} else {x *…

华南理工大学-大学物理实验-不良导体热导率测量

不良导体热导率测量 引言 导热系数(又叫热导率)是反映材料热性能的重要物理量。热传导是热交换的三种(热传导、对流和辐射)基本形式之一,是工程热物理、材料科学、固体物理及能源、环保等各个研究领域的课题。材料的导热机理在很大程度上取决于它的微观结构,热量的传递依靠…

搜维尔科技:利用虚拟现实优化汽车仪表盘或飞机驾驶舱的人机工程学设计

利用虚拟现实优化汽车仪表盘或飞机驾驶舱的人机工程学设计 消费者对新推出的车型有何反应&#xff1f;驾驶感舒适吗&#xff1f;驾驶员能否轻松触及并操作仪表盘上的所有命令装置&#xff1f;车内的视野足够清晰开阔吗&#xff1f;汽车或飞机制造商必须回答所有这些问题&#…

Java中运用SpirngAOP的来思想实现自定义日志注解并使用

1.AOP的思想 面向切面编程。它是对OOP(面向对象编程)的一种补充&#xff0c;OOP往往是继承或者是实现都是纵向进行的&#xff0c;而AOP是切面编程&#xff0c;是横向的&#xff0c;它出现的目的是将我们某些与业务无关的公共代码提取出来&#xff0c;找到一个切点进行切入形成…

服务优雅上下线实现方案-运维

1、前言 前一篇文章介绍了nginx通过nginx_upstream_check_module模块实现后端健康检查&#xff0c;基于这篇文章介绍一下服务优雅上下线的实现方案。 对于微服务来说&#xff0c;服务的优雅上下线是必要的。对于上线来说&#xff0c;如果服务没有启动成功&#xff0c;就不应该对…

sqli-labs-master 25-30关

sqli-labs第25关 由本题意可得过滤and和or&#xff0c;我用双写进行绕过&#xff0c;例如&#xff1a;infoorrmation,aandnd 数据库名 http://127.0.0.1/sqli-labs-master/Less-25/?id-1%27%20union%20select%201,2,database()-- 表名 127.0.0.1/sqli-labs-master/Less-25…

24/8/7算法笔记 决策树分类

决策树是一种常用的机器学习算法&#xff0c;用于分类和回归任务。它通过学习简单的决策规则从数据特征中推断出目标值。以下是决策树的一些关键特点&#xff1a; 树形结构&#xff1a;决策树由一系列的问题组成&#xff0c;每个问题对应一个特征和可能的取值。这些问题按照树状…

orcad和allegro无法交互的解决方案

当Orcad和Allegro无法交互时&#xff0c;可能是由于多种原因导致的。以下是一些常见的解决方案&#xff0c;旨在帮助用户解决这一问题&#xff1a; 1. 检查并设置Enable Intertool Communication选项 首先&#xff0c;确保在Orcad Capture CIS中启用了“Enable Intertool Com…

ORM工具之SQLAlchemy

SQLAlchemy是Python编程语言下的一款开源软件。提供了SQL工具包及对象关系映射&#xff08;ORM&#xff09;工具&#xff0c;使用MIT许可证发行。 SQLAlchemy“采用简单的Python语言&#xff0c;为高效和高性能的数据库访问设计&#xff0c;实现了完整的企业级持久模型”。SQL…

javax.net.ssl.SSLException: Unrecognized SSL message, plaintext connection

这段代码中出现的异常 javax.net.ssl.SSLException: Unrecognized SSL message, plaintext connection 通常是因为客户端尝试通过非加密连接发起 HTTPS 请求&#xff0c;而服务器期望的是加密的 SSL/TLS 连接。 这个异常可能是因为以下几种情况之一&#xff1a; HTTPS 服务配置…

Element-Plus组件Tree树形控件时,传输失去父节点和回显父节点下的子节点全选问题解决

使用环境 Vue 3 in Vite Element-Plus JS语法&#xff08;非TS&#xff09; 问题描述&#xff1a; 在使用Element-Plus组件Tree树形控件时&#xff0c;会出现如下问题&#xff1a; 1、子节点未全选时&#xff0c;往后端传输的选中节点没有包含父节点。 如下图&#xff0c;…

学习大数据DAY33 Flask 库 API 开发介绍,OS 库,pandas 库和简单爬虫

目录 Python API 接口开发用法介绍 Postman 调试接口 OS 库 pandas Pandas 数据结构 - Series Pandas 处理数据方法 Pandas CSV 文件 Pandas JSON Pandas excel 文件 上机练习 11 爬虫 爬取所有数据 pandas 分析处理数据 导入到 mysql 上机练习 12---使用爬虫pan…

Ubuntu 24.04 LTS安装elasticsearch-8.14.3+Kibana

1.安装Elasticsearch 1.1 下载Elasticsearch # 1. 更新包索引 sudo apt update# 2. 升级已安装的软件包 sudo apt upgrade -y# 3. 进入 /opt 目录 cd /opt# 4. 下载Elasticsearch压缩包 sudo wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.14.…

国产化飞腾D2000独显可插拔式OPS电脑主板,应用于信创教育、信创会议、信创办公等领域

国产化飞腾D2000 主板规格书 产品概述 XM-F611是我司自主研发设计的一款独显可插拔式OPS电脑主板&#xff0c;符合Intel OPS(Open Pluggable Specification)标准规范。采用飞腾腾锐D2000八核处理器加国产独立显卡&#xff0c;搭配国产银河麒麟或统信操作系统&#xff0c;能够…

sparkhive--练习2

需求&#xff1a; 在hive中创建对应表&#xff0c;并且导入数据&#xff0c;使用spark完成对应的查询 stu_name course score 张三 语文 98 张三 数学 95 张三 英语 89 李四 语文 97 李四 数学…

【天数计算】输入某年某月某日,判断这一天是这一年的第几天

要求&#xff1a;输入某年某月某日&#xff0c;判断这一天是这一年的第几天&#xff0c;使用C语言实现 #include<stdio.h>int dayYear(int year,int month,int day){int days_in_month[] {0,31,28,31,30,31,30,31,31,30,31,30,31};int i,days0;for(i1;i<month;i){da…

分类预测|基于粒子群优化核极限学习机的Adaboost集成模型数据分类预测Matlab程序 PSO-KELM-Adaboost

分类预测|基于粒子群优化核极限学习机的Adaboost集成模型数据分类预测Matlab程序 PSO-KELM-Adaboost 文章目录 前言分类预测|基于粒子群优化核极限学习机的Adaboost集成模型数据分类预测Matlab程序 PSO-KELM-Adaboost 一、PSO-KELM-Adaboost模型1. 核化极限学习机 (KELM)2. 粒子…