算法刷题:无重复字符的最长字串

无重复字符的最长字串

  • .
  • 题目链接
  • 题目详情
  • 算法原理
    • 题目解析
    • 滑动窗口
    • 定义指针
    • 进窗口
    • 判断
    • 出窗口
    • 更新结果
  • 我的答案

.

在这里插入图片描述

题目链接

无重复字符的最长字串

题目详情

在这里插入图片描述

算法原理

题目解析

首先,为了使字符串遍历的更加方便,我们选择将字符串转换为数组
题目要求子串中不能有重复的字符,因此,我们可以利用hash表来校验是否重复,这里我们采用数组来模拟hash表

滑动窗口

者道题我们使用的是滑动窗口的思想,大致逻辑如图
在这里插入图片描述

定义指针

因为窗口需要两个指针来维护窗口的边界,且两个指针都需要对数组进行从左往右的遍历操作,因此,我们定义left和right两个指针,初始值都为0

进窗口

这里的进窗口操作,可以理解为将hash表中的值进行+1操作

判断

这里的判断,主要是校验刚刚进行hash表+1操作之后的值,如果>1,说明hash表中出现了重复的字符,即不满足条件,需要出窗口

出窗口

这里的出窗口操作,就是将hash表中的left值除去,并将left往后移动一位.

完成操作之后,继续进行判断,如果已经没有重复的字符,就进行进窗口操做,直到right到达数组边界

更新结果

这里需要注意,题目要求无重复字符的最长字串,因此需要记录一下,hash表中的数据处于合法状态的时候,最长字串的长度

我的答案

class Solution {
    public int lengthOfLongestSubstring(String ss) {
        //将字符串转换为数组
        char[] s = ss.toCharArray();
        //利用数组模拟哈希表
        int [] hash = new int [128];
        //定义指针
        int left = 0,right = 0,n=s.length,ret = 0;
        while(right<n){
            //进窗口(right加入hash表))
            hash[s[right]]++;
            //判断hash表中是否有与当前right重复的数
            while(hash[s[right]]>1){
                //不满足条件,出窗口(left移除hash表),直到将与right重复的数被移除
                hash[s[left++]]--;
            }
            //当前hash表合法,可以更新结果
            ret = Math.max(ret,right-left+1);
            //为下一次进窗口做准备
            right++;
        }
        return ret;
    }
}

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

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

相关文章

LaTeX中的documentclass命令:指定文档的类型和整体布局

诸神缄默不语-个人CSDN博文目录 documentclass 是 LaTeX 中一个基础且重要的命令&#xff0c;用于定义文档的整体布局和样式。这个命令告诉 LaTeX 编译器文档是属于哪一类的&#xff0c;比如是文章、报告、书籍等&#xff0c;每一类都有其预定义的格式和结构。 文章目录 基本语…

MongoDB从入门到实战之.NET Core使用MongoDB开发ToDoList系统(2)-Swagger框架集成

Swagger是什么&#xff1f; Swagger是一个规范且完整API文档管理框架&#xff0c;可以用于生成、描述和调用可视化的RESTful风格的 Web 服务。Swagger 的目标是对 REST API 定义一个标准且和语言无关的接口&#xff0c;可以让人和计算机拥有无须访问源码、文档或网络流量监测就…

JDBC 核心 API

引入 mysql-jdbc 驱动 驱动 jar 版本的选择&#xff1a;推荐使用 8.0.25&#xff0c;省略时区设置java 工程导入依赖 项目创建 lib 文件夹导入驱动依赖 jar 包jar 包右键 - 添加为库 JDBC 基本使用步骤 注册驱动获取连接创建发送 sql 语句对象发送 sql 语句&#xff0c;并获…

清华AutoGPT:掀起AI新浪潮,与GPT4.0一较高下

引言&#xff1a; 随着人工智能技术的飞速发展&#xff0c;自然语言处理&#xff08;NLP&#xff09;领域迎来了一个又一个突破。最近&#xff0c;清华大学研发的AutoGPT成为了业界的焦点。这款AI模型以其出色的性能&#xff0c;展现了中国在AI领域的强大实力。 目录 引言&…

字符串拼接 - 华为OD统一考试(C卷)

OD统一考试&#xff08;C卷&#xff09; 分值&#xff1a; 200分 题解&#xff1a; Java / Python / C 题目描述 给定 M 个字符( a-z ) &#xff0c;从中取出任意字符(每个字符只能用一次)拼接成长度为 N 的字符串&#xff0c;要求相同的字符不能相邻。 计算出给定的字符列表…

突发!亚马逊创始人贝索斯抛售60亿美元股票,外网疑其或加仓比特币

号外&#xff1a;2.16教链内参《内参&#xff1a;OpenAI Sora惊艳发布&#xff0c;加密圈有人获利超700倍》 前世界首富、全球知名电商平台亚马逊&#xff08;amazon&#xff09;创始人杰夫贝索斯&#xff08;Jeff Bezos&#xff09;最近一周以来接连抛售自家公司股票&#xff…

BulingBuling[Beyond the To-Do List] - 《让金钱为你服务》 [ Make Money Work for You ]

与《财务自由: 赚到足够的钱的有效方法》作者Grant的简短访谈 让钱为你工作 超越待办事项清单 主持人&#xff1a;Erik Fisher Make Money Work for You Beyond the To-Do List Hosted by Erik Fisher 与Erik Fisher一起探索如何确定你生活中最大的财务杠杆以及使用它们的最佳方…

【Linux系统化学习】文件重定向

目录 文件内核对象 文件描述符的分配规则 重定向 重定向的概念 dup2系统调用 输出重定向 追加重定向 输入重定向 stderr解析 重定向到同一个文件中 分离常规输出和错输出 文件内核对象 上篇文章中我们介绍到了操作系统中的文件&#xff0c;操作系统为了方…

什么是智慧公厕,智慧公厕有哪些功能

1.什么是智慧公厕&#xff1f; 随着智慧城市的快速发展&#xff0c;公共厕所作为城市基础设施的一部分&#xff0c;也在逐步升级转型。那么&#xff0c;什么是智慧公厕&#xff1f;智慧公厕作为智慧城市的重要组成部分&#xff0c;将公共厕所的建设、设计、使用、运营和管理等…

报错405(errAxiosError: Request failed with status code 405)

errAxiosError: Request failed with status code 405 前端调用接口的方法跟后台定义接口的方法不一致

docker (四)-docker网络

默认网络 docker会自动创建三个网络&#xff0c;bridge,host,none bridge桥接网络 如果不指定&#xff0c;新创建的容器默认将连接到bridge网络。 默认情况下&#xff0c;使用bridge网络&#xff0c;宿主机可以ping通容器ip&#xff0c;容器中也能ping通宿主机。 容器之间只…

UE4学习笔记 FPS游戏制作5 动画蒙太奇制作开枪动画

创建一个蒙太奇 选择角色的骨骼&#xff0c;并重命名 编辑蒙太奇 将我们需要的动画拖动到Default下的两个白杠的上边那个里 然后在下方的Sections节点中&#xff0c;点击Preview后的Default&#xff0c;选中后&#xff0c;再点击PreviewAllScetions上百年的长的绿色的Defalut&…

使用miniconda管理Python环境

之前经常使用pipenv管理虚拟环境&#xff0c;但是有一个问题就是代码给别人使用的时候&#xff0c;别人使用的Python版本和自己的不一致时&#xff0c;安装依赖包的时候会有问题。所以现在使用miniconda来管理虚拟环境&#xff0c;不仅小巧方便&#xff0c;还能为每个环境指定不…

Gitee入门之工具的安装

一、gitee是什么&#xff1f; Gitee&#xff08;码云&#xff09;是由开源中国社区在2013年推出的一个基于Git的代码托管平台&#xff0c;它提供中国本土化的代码托管服务。它旨在为个人、团队和企业提供稳定、高效、安全的云端软件开发协作平台&#xff0c;具备代码质量分析、…

LeetCode 100题目(python版本)待续...

一.哈希 1.两数之和 题目 给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中找出 和为目标值 target 的那 两个 整数&#xff0c;并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是&#xff0c;数组中同一个元素在答案里不能重复…

【LeetCode: 103. 二叉树的锯齿形层序遍历 + BFS】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

QGIS004:【10栅格地形分析工具箱】-坡度、坡向、山体阴影

摘要&#xff1a;QGIS栅格地形分析工具箱常用工具有坡度、坡向、山体阴影等选项&#xff0c;本文介绍各选项的基本操作。 实验数据&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1gYZ_om4AlSdal0bts2mt-A?pwd4rrn 提取码&#xff1a;4rrn 一、坡度 工具功能&…

VitePress-17- 配置- appearance 的作用详解

作用说明 appearance : 是进行主题模式的配置开关&#xff0c;决定了是否启用深色模式。 可选的配置值&#xff1a; true: 默认配置&#xff0c;可以切换为深色模式&#xff1b; false: 禁用主题切换&#xff0c;只使用默认的配置&#xff1b; dark: 默认使用深色模式&#xff…

软件工程师,超过35岁怎么办

概述 随着科技行业的飞速发展&#xff0c;软件开发工程师的职业道路充满了各种机遇和挑战。对于已经在这个行业摸爬滚打了十多年的软件开发工程师来说&#xff0c;当他们步入35岁这个年纪时&#xff0c;可能会感到一些迷茫和焦虑。许多人担忧&#xff0c;在以创新、活力、快速迭…

SUSAN关键点检测以及SAC-IA粗配准

一、SUSAN关键点检测 C #include <iostream> #include <pcl/io/pcd_io.h> #include <pcl/point_types.h> #include <pcl/common/io.h> #include <pcl/visualization/pcl_visualizer.h> #include <boost/thread/thread.hpp> #include <…