package main
import (
"fmt"
)
func longestSubstring(s string) string {
start := 0
maxLength := 0
longestSubstr := ""
charIndex := make(map[rune]int)
for end, char := range s {
// If the character is already in the map and within the current window
if index, exists := charIndex[char]; exists && index >= start {
start = index + 1
}
// Update the character's latest index
charIndex[char] = end
// Check if the current substring is the longest
if currentLength := end - start + 1; currentLength > maxLength {
maxLength = currentLength
longestSubstr = s[start : end+1]
}
}
return longestSubstr
}
func main() {
// Test cases
fmt.Println(longestSubstring("abcabcbb")) // Output: "abc"
fmt.Println(longestSubstring("bbbbb")) // Output: "b"
fmt.Println(longestSubstring("xwwwqfwwxqwyq")) // Output: "xqwy"
}
/*
run:
abc
b
xqwy
*/