给定一个字符串 s ,请你找出其中不含有重复字符的 最长 子串 的长度。
示例 1:
输入: s = "abcabcbb"
输出: 3
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。
示例 2:
输入: s = "bbbbb"
输出: 1
解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。
示例 3:
输入: s = "pwwkew"
输出: 3
解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。
请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。
// 使用aiisc码表做判断比用官方题解的哈希更快
func lengthOfLongestSubstring(s string) int {
// 使用双指针加byte数组判断是否重复
start, end := 0, 0
boolArray := [128]bool{}
count := 0
for end < len(s) {
// 首先判断是否存在重复
if boolArray[s[end]] {
// 记录count
if count < end-start {
count = end - start
}
// 如果重复将区间指针跳转到重复字母后
for s[end] != s[start] {
// start一直自增 直到选择到相同的字母, 并且去掉走过的字母
boolArray[s[start]] = false
start++
}
// 继续自增一次, 将相同的字母放到身后
start++
} else {
// 将遍历到的字符加入数组做判断用
boolArray[s[end]] = true
}
end++
}
if count < end-start {
count = end - start
}
return count
}
标签:子串,字符,end,重复,count,start,最长
From: https://www.cnblogs.com/sunchenxuan/p/18159282