题目

请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度。

示例 1:

输入: “abcabcbb”
输出: 3
解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。
示例 2:

输入: “bbbbb”
输出: 1
解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。
示例 3:

输入: “pwwkew”
输出: 3
解释: 因为无重复字符的最长子串是 “wke”,所以其长度为 3。
请注意,你的答案必须是 子串 的长度,”pwke” 是一个子序列,不是子串。

提示:

s.length <= 40000

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/zui-chang-bu-han-zhong-fu-zi-fu-de-zi-zi-fu-chuan-lcof
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

题解

1.双指针(滑动窗口)+ set

  1. /**
  2. * @param {string} s
  3. * @return {number}
  4. */
  5. var lengthOfLongestSubstring = function (s) {
  6. // 滑动窗口
  7. const hash = new Set()
  8. const n = s.length
  9. let res = 0
  10. if (n === 1) return 1
  11. let l = 0, r = 0
  12. while (r < n - 1) {
  13. while (r < n && !hash.has(s[r])) {
  14. hash.add(s[r])
  15. r++
  16. }
  17. res = Math.max(r - l, res)
  18. while (l < r && hash.has(s[r])) {
  19. hash.delete(s[l])
  20. l++
  21. }
  22. }
  23. return res
  24. };