Golang无重复最长子串

题目

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

示例1

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

示例2

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

示例3

输入: "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)) }

程序运行后,控制台输出如下:

03_golang最长子串.png

我们使用了两种方式来实现。