3. 无重复字符的最长子串

题目描述

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

示例

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

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

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

解法

func lengthOfLongestSubstring(s string) int {
if s == "" {
return 0
}
var (
maxX = 0
maxY = 1
x = 0
y = 1
)
charList := []byte(s)
for x <= y && y < len(charList) {
isIn := false
for _, i := range charList[x:y] {
if i == charList[y] {
isIn = true
break
}
}
if isIn {
x += 1

} else {
y += 1
}
if y-x > maxY-maxX {
maxY, maxX = y, x
}
}
return maxY - maxX
}

本地测试

package main

import "fmt"

func main() {
a := "abcabcbb"
fmt.Println(lengthOfLongestSubstring(a))
b := "bbbbb"
fmt.Println(lengthOfLongestSubstring(b))
c := "pwwkew"
fmt.Println(lengthOfLongestSubstring(c))
}

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/longest-substring-without-repeating-characters