essay
hot100-无重复字符的最大字串
#算法
hot100——无重复字符的最大字串
给定一个字符串 s ,请你找出其中不含有重复字符的 最长 子串 的长度。
示例 1:
输入: s = "abcabcbb"
输出: 3
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。注意 "bca" 和 "cab" 也是正确答案。
示例 2:
输入: s = "bbbbb"
输出: 1
解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。
示例 3:
输入: s = "pwwkew"
输出: 3
解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。
请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。
提示:
0 <= s.length <= 5 * 104
s 由英文字母、数字、符号和空格组成
解
func lengthOfLongestSubstring(s string) int {
//使用map存储遍历后的字符
sMap := make(map[byte]int)
//滑动窗口左边
left := 0
result := 0
for right := 0; right < len(s); right++ {
c := s[right]
//在map里遇到重复的字符,且当前重复字符在滑动窗口内(i>=left)
if i, ok := sMap[c]; ok && i >= left {
// 立刻改变滑动窗口的左边界
left = sMap[c] + 1
}
//没遇到重复的字符直接放入map中(拓宽右边界),存的是下标;重复的话更新左边界
sMap[c] = right
// 计算当前窗口 [left, right] 的长度,并更新最大长度
result = max(result, right-left+1)
}
return result
}