leetcode3 无重复字符最长子串

给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。

示例 1:

输入: "abcabcbb"
输出: 3 
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。
示例 2:

输入: "bbbbb"
输出: 1
解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。
示例 3:

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

思路:

一个set记录i到j遇到的所有字母。

两个指针,符合条件就更新答案,并且右指针向右。

不符合就删除左指针相应的值, 并继续尝试。

public class Solution {public int lengthOfLongestSubstring(String s) {int n = s.length();Set<Character> set = new HashSet<>();int ans = 0, i = 0, j = 0;while (i < n && j < n) {// try to extend the range [i, j]if (!set.contains(s.charAt(j))){set.add(s.charAt(j++));ans = Math.max(ans, j - i);}else {set.remove(s.charAt(i++));}}return ans;}
}

优化

第一:可以用map记录一下遇到的char的下标是多少,这样我们缩i的时候不用一个一个缩,而是直接到该去的位置

第二:可以不用map,因为字符种类有限,用数组记录(桶排序思想)

public class Solution {public int lengthOfLongestSubstring(String s) {int n = s.length(), ans = 0;int[] index = new int[128];for (int j = 0, i = 0; j < n; j++) {i = Math.max(index[s.charAt(j)], i);ans = Math.max(ans, j - i + 1);index[s.charAt(j)] = j + 1;}return ans;}
}

 

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

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

相关文章

如何正确编写linux守护进程

1、守护进程&#xff0c;也就是通常说的Daemon进程&#xff0c;是Linux中的后台服务进程。它是一个生存期较长的进程&#xff0c;通常独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。如果想让某个进程不因为用户或终端或其他地变化而受到影响&#xff0c;那…

Linux(6)-命令行的使用,history,shell脚本

命令行的使用,shell脚本1.终端shell,man1.1 Ctrlr--匹配查找历史命令1.2 history [n] --列出历史命令1.3&#xff01;--执行历史命令2.shell 编程2.1 shell脚本2.2 注释2.3 指明所用的shell2.4 支持函数2.5 使用变量2.6 解析命令行参数2.7 if, for, case, while2.8 shell脚本中…

lua元表的理解

元表概念 &#xff08; Metatable&#xff09;元表由键名为 事件 (event) 和其中的值叫作元方法 (metamethod)组成。在lua中每个值都有一个元表。而table和userdata所定义的值允许自定义对应的元表&#xff0c;其他都是用统一的元表。我的理解&#xff0c;元表&#xff0c;其实…

程序以及论文

本人长期承接大学计算机专业的毕业设计和论文的编写。 主要开发语言C&#xff0c;C &#xff08;windows或linux平台皆可&#xff09;&#xff0c;php&#xff0c;c#&#xff0c;VC 。 课题内容可以是 管理系统&#xff0c;可以是 网站设计开发 可以是 网络聊天 可以是 应用…

Github(1)-概览,初始化仓库

Github网页-本地git1.github网页1.1 主要界面1.1.1github主页1.1.2仓库主页1.1.3 个人页面1.2 注册github账号1.3 新建平台仓库2.git-本地仓库2.1 git本地仓库的三个区域2.2 创建一个本地仓库GitHub 本质上是一个代码托管平台&#xff0c;它提供的是基于 Git 的代码托管服务。G…

Lua 协程

Lua里的协程是一个原来没见过的东西&#xff0c;Python的Gevent也是一个基于coroutine的python网络开发框架。性能据说很不错。协同的一个关键特征是它可以不断颠倒调用者与被调用者之间的关系协程和一般多线程的区别是&#xff0c;一般多线程由系统决定该哪个线程执行&#xf…

leetcode16 最接近的三数之和

给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数&#xff0c;使得它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在唯一答案。 例如&#xff0c;给定数组 nums [-1&#xff0c;2&#xff0c;1&#xff0c;-4], 和 target 1…

LINUX下动态链接库的使用-dlopen dlsym dlclose dlerror

dlopen 基本定义   功能&#xff1a;打开一个动态链接库 包含头文件&#xff1a; #include <dlfcn.h> 函数定义&#xff1a; void * dlopen( const char * pathname, int mode ); 函数描述&#xff1a; 在dlopen的&#xff08;&#xff09;函数以指定模式打开指定的动…

leecode11 盛水最多的容器

给定 n 个非负整数 a1&#xff0c;a2&#xff0c;...&#xff0c;an&#xff0c;每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线&#xff0c;垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0)。找出其中的两条线&#xff0c;使得它们与 x 轴共同构成的容器可以容纳最多…

Github(2)-本地配置git

本地配置git1.注册账号2.安装git工具3.配置git 账号1.注册账号 github网页注册github账户 2.安装git工具 本地安装git工具 step1 查看是否安装git git version step2 mac 安装 brew install git step2 linux安装 sudo apt-get install git 3.配置git 账号 创建ssh key, 配置…

lua面向对象编程之点号与冒号的差异详细比较

首先,先来一段在lua创建一个类与对象的代码 Class {}Class.__index Classfunction Class:new(x,y)local temp {}setmetatable(temp, Class)temp.x xtemp.y yreturn tempendfunction Class:test()print(self.x,self.y)endobject Class.new(10,20)object:test() 猜一下会输…

lua __index __newindex upvalue 示例

项目中有个公会对象&#xff0c;数据大部分存在data中&#xff0c;之前都是 u.data.point这样访问&#xff0c;太麻烦了。 于是通过设置__index 使之可以直接访问属性&#xff0c;u.point。 但是还是不能直接改属性&#xff0c;u.point 4&#xff0c;所以再设置了__newindex…

leecode26 删除排序数组中的重复项

给定一个排序数组&#xff0c;你需要在原地删除重复出现的元素&#xff0c;使得每个元素只出现一次&#xff0c;返回移除后数组的新长度。 不要使用额外的数组空间&#xff0c;你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。 示例 1: 给定数组 nums [1,1,2…

MachineLearning(6)-Daviad Silver强化学习课程脉络整理

强化学习-Daviad Silver强化学习课程脉络整理1.lecture1 introduction1.1 强化学习简介1.2 强化学习类别1.3 强化学习的主要问题2.lecture2 Markov Decision Process2.1 MP,MRP,MDP2.2 Bellman Eqution--贝尔曼方程2.3 Bellman Eqution--贝尔曼期望方程2.4 最优策略2.5 最优值函…

lua的VS或者VC环境的搭建调试

安装完LuaForWindows_v5.1.4 打开vs tools->options->projects->directories executable files 选项添加lua安装以后的路径,我的是 C:\Program Files\Lua\5.1 include files选项添加lua include路径,我的是 C:\Program Files\Lua\5.1include library files 选项添…

leecode53 最大子序列和

给定一个整数数组 nums &#xff0c;找到一个具有最大和的连续子数组&#xff08;子数组最少包含一个元素&#xff09;&#xff0c;返回其最大和。 示例: 输入: [-2,1,-3,4,-1,2,1,-5,4], 输出: 6 解释: 连续子数组 [4,-1,2,1] 的和最大&#xff0c;为 6。 思路&#xff1a;…

在页游中LUA的应用(1)

通常,你希望在你的游戏开始的时候读取一些信息,以配置你的游戏,这些信息通常都是放到一个文本文件中,在你的游戏启动的时候,你需要打开这个文件,然后解析字符串,找到所需要的信息。 或许你认为这样就足够了,为什么还要使用Lua呢? 应用于“配置”这个目的,Lua提供给你…

Github(3)-本地文件管理

使用github 托管代码简单使用教程--本地文件管理1.基本概念2.本地文件管理2.1 git add2.2 git status2.3 git commit2.3 git log2.5 git reset --hard 版本回退2.6 git reflog2.7 git diff2.8 git checkout --file 工作区文件恢复2.9 git rm 删除版本库里的文件廖雪峰老师博文学…

linux 中阻塞与非阻塞 同步与异步

简单点说: 阻塞就是干不完不准回来&#xff0c; 非阻塞就是你先干&#xff0c;我先看看有其他事没有&#xff0c;完了告诉我一声。 我们拿最常用的send和recv两个函数来说吧。比如你调用send函数发送一定的Byte,在系统内部send做的工作其实只是把数据传输(Copy)到TCP/IP协议栈…

leecode62 不同路径

示例 1: 输入: m 3, n 2 输出: 3 解释: 从左上角开始&#xff0c;总共有 3 条路径可以到达右下角。 1. 向右 -> 向右 -> 向下 2. 向右 -> 向下 -> 向右 3. 向下 -> 向右 -> 向右 示例 2: 输入: m 7, n 3 输出: 28 思路&#xff1a;太过于简单&#xf…