无重复字符的最长字串

给定一个字符串 s ,请你找出其中不含有重复字符的 最长连续子字符串 的长度。

面试常考算法题,很经典

考察双指针+哈希,指针移动法

package main

import (
	"fmt"
)

func main() {
	fmt.Println(lengthOfLongestSubstring("pwwkew"))
}
func lengthOfLongestSubstring(s string) int {
	// 滑动窗口-双指针+哈希,要注意第二个for循环,和map1[s[l]]--,是l左
	if len(s) <= 1 {
		return len(s)
	}
	l, r := 0, 1
	sMax := 0
	map1 := make(map[byte]int, 0)
	map1[s[0]]++
	for r < len(s) {
		map1[s[r]]++
		for r < len(s) && map1[s[r]] > 1 {
			map1[s[l]]--
			l++
		}
		sMax = max(r-l+1, sMax)
		r++
	}
	fmt.Println(map1)
	return sMax
}
func max(a, b int) int {
	if a > b {
		return a
	}
	return b
}

全部评论

相关推荐

点赞 评论 收藏
转发
1 收藏 评论
分享
牛客网
牛客企业服务