Featured image of post 剑指 Offer 48. 最长不含重复字符的子字符串

剑指 Offer 48. 最长不含重复字符的子字符串

题目描述

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

示例 1:

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

示例 2:

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

示例 3:

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

提示:

  • s.length <= 40000

注意:本题与主站 3 题相同:https://leetcode-cn.com/problems/longest-substring-without-repeating-characters/

解法一:滑动窗口

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
func lengthOfLongestSubstring(s string) int {
    left, right, n := 0, 0, len(s)
    record := make(map[byte]bool)
    ans := 0
    for right < n {
        if 0 != ans {
            delete(record, s[left])
            left++
        }
        for right < n && !record[s[right]] {
            record[s[right]] = true
            right++
        }
        if ans < right-left {
            ans = right - left
        }
    }
    return ans
}
comments powered by Disqus
Built with Hugo
主题 StackJimmy 设计