leetcode-3-无重复字符的最长子串-javascript
题目
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。
示例 1:
输入: "abcabcbb"
输出: 3
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。
示例 2:
输入: "bbbbb"
输出: 1
解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。
思路
由于ASCII字符最多只有128个,按题目的描述应该不会出现中文等其他字符,所以我们可以考虑申请一个长度为128的数组(名为letter),这个数组我们以字符的ASCII码为索引,我们先给数组中的所有值赋值0。然后开始扫描字符串,我们这里以示例一
为例,首先扫描到a,取得a的ASCII码,然后letter[a.charCodeAt()] = 0 + 1
,这里0是a在字符串里的位置,然后扫描第二个字符b,同样的letter[a.charCodeAt()] = 0 + 1
,接下来c,然后当我们遇到再下一个a的时候letter[a.charCodeAt()]
的值不为0,说明我们之前已经遇到过这个字符了,那么我们就可以截取(0, 2)位置的字符串存入maxArr中,然后再把当前新的a的位置存入,也就是 3 + 1,此时我们所认为的最长的数组就是 bca,这是正在扩展中的字符串,它还有无限的可能~~然后已经存入最大数组中的是abc,之后再接着扫描。。。
这个算法的思想就是动态的维护一个最长字符串,只要遇到和当前字符串中有相同字符的就截断当前字符串,然后从相同的字符的下一个开始继续维护
代码
/**
* @param {string} s
* @return {number}
*/
var lengthOfLongestSubstring = function(s) {
const letter = new Array(128); // 记录最长子串的位
let max = 0;
const maxArr = [];
let begin = 0;
for(let i = 0; i < 128; i += 1) {
letter[i] = 0;
}
for (let i = 0; i < s.length ; i += 1) {
const pos = s[i].charCodeAt();
if (letter[pos] !== 0 && letter[pos] > begin) {
maxArr.push(max);
max = i + 1 - letter[pos];
begin = letter[pos];
letter[pos] = i + 1;
} else {
letter[pos] = i + 1;
max += 1;
}
}
maxArr.push(max);
for (let i = 0; i < maxArr.length; i += 1) {
if (max < maxArr[i]) {
max = maxArr[i];
}
}
return max;
};
leetcode-3-无重复字符的最长子串-javascript的更多相关文章
- Leetcode(三)无重复字符的最长子串
3. 无重复字符的最长子串 题目描述 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. 示例: 输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最 ...
- 【LeetCode】无重复字符的最长子串【滑动窗口法】
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. 示例 1: 输入: "abcabcbb"输出: 3 解释: 因为无重复字符的最长子串是 "abc&quo ...
- [LeetCode] 3. 无重复字符的最长子串
题目链接:(https://leetcode-cn.com/problems/longest-substring-without-repeating-characters/) 题目描述: 给定一个字符 ...
- 【leetcode 3. 无重复字符的最长子串】解题报告
思路:滑动窗口的思想 方法一:滑动窗口 int lengthOfLongestSubstring(string s) { /* 控制一个滑动窗口,窗口内的字符都是不重复的,通过set可以做到判断字符是 ...
- LeetCode 3: 无重复字符的最长子串 Longest Substring Without Repeating Characters
题目: 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. Given a string, find the length of the longest substring withou ...
- Leetcode——3. 无重复字符的最长子串
难度: 中等 题目 Given a string, find the length of the longest substring without repeating characters. 给定一 ...
- 力扣Leetcode 3. 无重复字符的最长子串
无重复字符的最长子串 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. 示例 示例 1: 输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串 ...
- [LeetCode]3. 无重复字符的最长子串(滑动窗口)
题目 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. 示例 1: 输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc ...
- [LeetCode]3.无重复字符的最长子串(Java)
原题地址: longest-substring-without-repeating-characters/submissions 题目描述: 示例 1: 输入: s = "pwwkew&qu ...
- LeetCode3.无重复字符的最长子串 JavaScript
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. 示例 1: 输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc&qu ...
随机推荐
- DataWorks开发ODPS SQL开发生产环境自动补全ProjectName
简介: DataWorks标准模式下,支持开发环境和生产环境隔离,开发环境和生产环境的数据库表命名有所区别,如果需要在开发环境访问生产环境的数据库表或者跨项目空间访问其他项目空间的表,需要根据proj ...
- [FAQ] edge 等浏览器的 debug 栏的 "网络" 中看不到网络请求
如果 edge 等浏览器的 debug 栏的 "网络" 中看不到网络请求, 出现这类情况一般是在 debug 栏的 "设置" 中进行了过滤,可能是不小心点了 ...
- vue解决二级路由redirect(默认路由)不传参的问题
场景: pageA----pageB(pageB包含三个二级路由) 默认进入pageB时进入第一个页面的路由,之后点击左侧按钮,分别进入其他二级路由 原router.js写法: //应用信息 ...
- 几个函数的使用例子:更新VBRK-XBLNR,IB01设备BOM创建,LI11N输入库存盘点
最近用到一些函数,网上的相关资料不多,这里记录一下. 本文链接:https://www.cnblogs.com/hhelibeb/p/17012303.html 1,使用 RV_INVOICE_HEA ...
- vue3早已具备抛弃虚拟DOM的能力了
前言 jquery时代更新视图是直接对DOM进行操作,缺点是频繁操作真实 DOM,性能差.react和vue时代引入了虚拟DOM,更新视图是对新旧虚拟DOM树进行一层层的遍历比较,然后找出需要更新的D ...
- Kafka源码分析(四) - Server端-请求处理框架
系列文章目录 https://zhuanlan.zhihu.com/p/367683572 一. 总体结构 先给一张概览图: 服务端请求处理过程涉及到两个模块:kafka.network和kafka. ...
- 虚拟机中安装mysql 完整教程( CentOS7 版本)
一.检查是否安装了Mysql Yum检查 yum list installed | grep mysql 安装则直接删除 yum remove mysql-community-client.x86_6 ...
- fastposter v2.9.2 最简海报生成器
fastposter v2.9.2 程序员必备海报生成器 fastposter海报生成器是一款快速开发海报的工具.只需上传一张背景图,在对应的位置放上组件(文字.图片.二维.头像)即可生成海报. 点击 ...
- ACM算法竞赛代码模板(长期更新)
C++算法模板 基础算法 排序 快速排序 void quickSort(int q[], int l, int r) { if (l >= r) return; int i = l - 1, j ...
- 保障升级:Splashtop 公布安全顾问委员会成员
加利福尼亚州圣何塞,2020年12月17日-远程访问和远程支持解决方案的全球领导者 Splashtop Inc. 召集了网络安全性和合规性方面的领先专家,成立了该公司的安全顾问委员会.这组顾问有助于指 ...