无重复字符的最长子串

给定一个字符串 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
}
posted @ 2024-04-26 09:38  烟熏咸鱼干  阅读(14)  评论(0编辑  收藏  举报