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