sudopower

LC:3: Longest Substring Without Repeating Characters

Link to problem

Solution 1 – Last seen position

func lengthOfLongestSubstring(s string) int {
	// use sliding window
	// check range using left right pointer
	// maintain freq of each char, if >1 move left pointer at that pos +1
	// right keeps moving with the loop
	// max length is difference between left and right

	var maxLen, left, right int
	var char int32
	seenAt := make(map[int32]int)
	for right, char = range s {
		if at, seen := seenAt[char]; seen && at >= left {
			left = at + 1
		}
		seenAt[char] = right
		maxLen = max(maxLen, right-left+1)
	}

	return maxLen
}

Solution 2 – Similar but using frequency count

func lengthOfLongestSubstring(s string) int {
    var left,right,maxLen int
    freqSeen := make(map[int32]int)
    var char int32
    for right,char = range s {
        freqSeen[char]+=1
        if _,seen:= freqSeen[char];seen{
            for freqSeen[char]>1{
                freqSeen[int32(s[left])]-=1
                left+=1
            }
        }
        maxLen=max(maxLen,right-left+1)
    }

    return maxLen
}

Leave a Reply

Your email address will not be published. Required fields are marked *

Related Blogs