leetcode3.无重复字符的最长子串

滑动窗口 双指针

3 无重复字符串的长度

基本思路

遍历字符串,没遇到过的字符,快指针继续+1,遇到过的字符,慢指针+1并且重置对应元素出现标识为false,如果对应的字符与快指针相同,则慢指针+1。当然别忘了更新长度。

解法代码

func lengthOfLongestSubstring(s string) int {
	lens := len(s)
	if lens < 2 {
		return lens
	}
	window := make([]bool, 128)

	l, r, leghth := 0, 0, math.MinInt

	for r < lens {
		c := s[r]
		if window[c] == false {
			window[c] = true
		} else {
			for l <= r {
				if s[l] == s[r] {
					if l < r {
						l++
					}
					break
				}
				d := s[l]
				l++
				window[d] = false

			}

		}

		if r-l+1 > leghth {
			leghth = r - l + 1
		}
		r++
	}

	if leghth == math.MinInt {
		return 0
	}

	return leghth

}

Last updated