lc-go/solutions/37/q3713/solution.go

36 lines
630 B
Go

// Package q3713 implements a solution for https://leetcode.com/problems/longest-balanced-substring-i/
package q3713
func longestBalanced(s string) int {
longest := 0
cnt, tmp := [26]int{}, [26]int{}
for i := range len(s) {
copy(cnt[:], tmp[:])
distinct, imbal, maxCnt := 0, 0, 0
for j := i; j >= 0; j-- {
c := s[j] - 'a'
cnt[c]++
if cnt[c] == 1 {
distinct++
imbal++
}
if cnt[c] > maxCnt {
maxCnt = cnt[c]
imbal = distinct - 1
} else if cnt[c] == maxCnt {
imbal--
}
if imbal == 0 {
longest = max(longest, i-j+1)
}
}
}
return longest
}
var _ = longestBalanced