-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathproblem013.go
More file actions
25 lines (24 loc) · 827 Bytes
/
Copy pathproblem013.go
File metadata and controls
25 lines (24 loc) · 827 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
package problem013
func Run(input string, distinctCharactersLimit uint) uint {
var longestSubstringSize uint = 0
characterCount := make(map[rune]int)
substringStartsAt, substringEndsAt := 0, 0
for substringEndsAt < len(input) {
startingCharacter := []rune(input)[substringEndsAt]
characterCount[startingCharacter] += 1
for uint(len(characterCount)) > distinctCharactersLimit {
startingCharacter := []rune(input)[substringStartsAt]
if characterCount[startingCharacter] > 1 {
characterCount[startingCharacter]--
} else {
delete(characterCount, startingCharacter)
}
substringStartsAt++
}
if substringSize := uint(substringEndsAt - substringStartsAt + 1); substringSize > longestSubstringSize {
longestSubstringSize = substringSize
}
substringEndsAt++
}
return longestSubstringSize
}