题目
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。
示例 1:
输入: "abcabcbb"
输出: 3
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。
示例 2:
输入: "bbbbb"
输出: 1
解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。
示例 3:
输入: "pwwkew"
输出: 3
解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。
请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/longest-substring-without-repeating-characters
我的go实现
func lengthOfLongestSubstring(s string) int {
var m = make(map[string]int)
var count, max int
var l = len(s)
for i := 0; i < l; i++ {
v := string(s[i])
if _, ok := m[v]; !ok {
count++
} else {
count = i - m[v]
lastIndex := m[v]
for key, value := range m {
if value <= lastIndex {
delete(m, key)
}
}
}
if count > max {
max = count
}
m[v] = i
}
return max
}
执行结果:通过
执行用时 : 56 ms
内存消耗 : 3.2 MB
以下是参考别人滑动窗口的解法
func lengthOfLongestSubstring(s string) int {
var m = make(map[uint8]int)
var left, ret =0, 0
var max = func(a,b int) int {
if a> b {
return a
}
return b
}
for i :=0;i<len(s);i++{
if c,ok:=m[s[i]];ok {
left = max(left,c)
}
ret = max(ret,(i-left+1))
m[s[i]]=i+1
}
return ret
}
执行结果:通过
执行用时 : 8 ms
内存消耗 : 3.1 MB