feat: 无重复字符的最长字串 (3)
This commit is contained in:
parent
7057f27ba2
commit
fe8572dd0e
88
leetcode/中等/无重复字符的最长子串.js
Normal file
88
leetcode/中等/无重复字符的最长子串.js
Normal file
@ -0,0 +1,88 @@
|
||||
/* 3. 无重复字符的最长子串
|
||||
已解答
|
||||
中等
|
||||
|
||||
相关标签
|
||||
相关企业
|
||||
给定一个字符串 s ,请你找出其中不含有重复字符的 最长
|
||||
子串
|
||||
的长度。
|
||||
|
||||
示例 1:
|
||||
|
||||
输入: s = "abcabcbb"
|
||||
输出: 3
|
||||
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。
|
||||
示例 2:
|
||||
|
||||
输入: s = "bbbbb"
|
||||
输出: 1
|
||||
解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。
|
||||
示例 3:
|
||||
|
||||
输入: s = "pwwkew"
|
||||
输出: 3
|
||||
解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。
|
||||
请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。
|
||||
|
||||
提示:
|
||||
|
||||
0 <= s.length <= 5 * 104
|
||||
s 由英文字母、数字、符号和空格组成
|
||||
*/
|
||||
|
||||
// /*
|
||||
// 思路:遍历每一个字符开始的最长字串有多少个,取最长的
|
||||
|
||||
// /**
|
||||
// * @param {string} s
|
||||
// * @return {number}
|
||||
// */
|
||||
// function lengthOfLongestSubstring(s) {
|
||||
// let maxLength = 0;
|
||||
// for (let i = 0; i < s.length; i++) {
|
||||
// const set = new Set();
|
||||
// let length = 0;
|
||||
// for (let j = i; j < s.length; j++) {
|
||||
// if (!set.has(s[j])) {
|
||||
// set.add(s[j]);
|
||||
// length++;
|
||||
// maxLength = Math.max(maxLength, length);
|
||||
// } else {
|
||||
// break;
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// return maxLength;
|
||||
// }
|
||||
|
||||
/*
|
||||
思路:用一个set数组来保存当前遍历的最长不重复的字符,定义left表示不重复字符串开始的字符
|
||||
right表示不重复字符串结束的字符,right一直往后面遍历,如果在set集合中没有重复的字符就直接
|
||||
把这个字符加入到set集合中去,如果在set集合中有这个字符就使用使用left下标代表的字符开始删除
|
||||
,知道没有right所指向的那个字符,此时set集合中的所有字符表示的就是一个新的不重复字符,我们那它
|
||||
和之前的不重复字符比较,直到遍历结束找到最长的不重复字符
|
||||
*/
|
||||
|
||||
/**
|
||||
* @param {string} s
|
||||
* @return {number}
|
||||
*/
|
||||
function lengthOfLongestSubstring(s) {
|
||||
const charSet = new Set();
|
||||
let maxLength = 0;
|
||||
let left = 0;
|
||||
const len = s.length;
|
||||
for (let right = 0; right < len; right++) {
|
||||
while (charSet.has(s.charAt(right))) {
|
||||
charSet.delete(s.charAt(left));
|
||||
left++;
|
||||
}
|
||||
|
||||
charSet.add(s.charAt(right));
|
||||
maxLength = Math.max(maxLength, right - left + 1);
|
||||
}
|
||||
return maxLength;
|
||||
}
|
||||
|
||||
console.log(lengthOfLongestSubstring('aaaaabcdefgca'));
|
Loading…
x
Reference in New Issue
Block a user