给定一个字符串 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;

};
Last modification:February 13, 2023
如果觉得我的文章对你有用,请随意赞赏