leetcode-字符串-无重复字符的最长子串

29 阅读1分钟

给定一个字符串 s ,请你找出其中不含有重复字符的最长子串的长度。

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

第一种解法

  • 求长度
func lengthOfLongestSubstring(s string) int {
    charSet := make(map[byte]bool)
    maxLength, left, right := 0, 0, 0
    for right < len(s) {
        if !charSet[s[right]] {
            charSet[s[right]] = true
            right++
            if right-left > maxLength {
                maxLength = right - left
            }
        } else {
            delete(charSet, s[left])
            left++
        }
    }
    return maxLength
}
  • 求子串的组成
func lengthOfLongestSubstring(s string) string {
   charSet := make(map[byte]bool)
   var maxLen, left, right, index int
   for right < len(s) {
      if !charSet[s[right]] {
         charSet[s[right]] = true
         right++
         if right-left > maxLen {
            index = left
            maxLen = right - left
         }
      } else {
         delete(charSet, s[left])
         left++
      }
   }
   return s[index:index+maxLen]
}