用 Golang 实现,给定一个 字符串,请你找出其中不含有重复字符的最长子串的长度。
输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。
输入: "bbbbb" 输出: 1 解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。
输入: "pwwkew" 输出: 3 解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。请注意,你的答案必须是子串的长度,"pwke" 是一个子序列,不是子串。
package main
import (
"fmt"
"strings"
)
func lengthOfLongestSubstring2(s string) int {
strArray := []rune(s)
res := 0
if len(strArray) == 1 {
return 1
}
for i := 0; i < len(strArray); i++ {
list := make(map[rune]int)
list[strArray[i]] = i
max := 0
for k := i + 1; k < len(strArray); k++ {
if _, ok := list[strArray[k]]; ok {
max = len(strArray[i:k])
break
} else {
list[strArray[k]] = i
}
max = len(strArray[i : k+1])
}
if max > res {
res = max
}
}
return res
}
func lengthOfLongestSubstring(s string) int {
window, start := 0, 0
for key := 0; key < len(s); key++ {
isExist := strings.Index(string(s[start:key]), string(s[key]))
if isExist == -1 {
if key-start+1 > window {
window = key - start + 1
}
} else {
start = start + isExist + 1
}
}
return window
}
func main() {
fmt.Println("嗨客网(www.haicoder.net)")
var str1 = "abcabcbb"
var str2 = "bbbbb"
var str3 = "pwwkew"
fmt.Println(lengthOfLongestSubstring(str1))
fmt.Println(lengthOfLongestSubstring(str2))
fmt.Println(lengthOfLongestSubstring(str3))
}
程序运行后,控制台输出如下:
我们使用了两种方式来实现。