给定一个字符串 s
,请你找出其中不含有重复字符的 最长子串
的长度。
示例 1:
输入: s = "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。
示例 2:
输入: s = "bbbbb" 输出: 1 解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。
示例 3:
输入: s = "pwwkew" 输出: 3 解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。 请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。
提示:
思路:
JAVASCRIPT/**
* @param {string} s
* @return {number}
*/
var lengthOfLongestSubstring = function (s) {
let number = 0;
let maxNumber = 0;
const map = new Map();
let l1 = 0,
l2 = 0;
while (l2 < s.length) {
if (!map.has(s[l2])) {
number++;
map.set(s[l2], l2);
} else {
const index = map.get(s[l2]) - l1;
if (index >= 0) {
number = number - index;
l1 += index + 1;
} else if (index < 0) {
number++;
}
map.set(s[l2], l2);
}
l2++
maxNumber = Math.max(maxNumber, number);
}
return maxNumber;
};
JAVASCRIPT/**
* @param {string} s
* @return {number}
*/
var lengthOfLongestSubstring = function (s) {
let l = 0,
res = 0;
const map = new Map();
for (let i = 0; i < s.length; i++) {
if (map.has(s[i])) {
l = Math.max(l, map.get(s[i]) + 1);
}
map.set(s[i], i);
res = Math.max(res, i - l + 1);
}
return res;
};
复杂度分析:
本文作者:叶继伟
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!