给定一个字符串
s
,请你找出其中不含有重复字符的 最长子串 的长度。来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/longest-substring-without-repeating-characters
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
示例 1:
输入: s = "abcabcbb"
输出: 3
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。
示例 2:
输入: s = "bbbbb"
输出: 1
解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。
示例 3:
输入: s = "pwwkew"
输出: 3
解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。
请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串
思路
- 遍历字符串
- 每一个字符串作为起点,向后直至选找到重复截止
- 记录每次截止时候 获取字符串的最大数
/**
* @param {string} s
* @return {number}
*/
var lengthOfLongestSubstring = function (s) {
if (!s) return 0 //空字符串直接返回
let set = new Set() //记录每次目标字符串使用
let max = 1 //默认最大长度为 1
for (let i = 0; i < s.length; i++) {
let right = i //每次循环中 左侧坐标为 该循环位置 右侧其实坐标为当前循环位置
while (!set.has(s[right]) && s[right]) { //若该值不在 集合中或者 不为空
set.add(s[right]) //记录该值
right++ //向右移动一位
}
max = Math.max(set.size, max)// 记录最大值
set.clear()//清空当前的集合
}
return max;
};