go: add «1190. Reverse Substrings Between Each Pair of Parentheses»

Signed-off-by: Matej Focko <me@mfocko.xyz>
This commit is contained in:
Matej Focko 2024-07-11 15:29:12 +02:00
parent 5f3765f37a
commit f6b4c01bbd
Signed by: mfocko
SSH key fingerprint: SHA256:5YXD7WbPuK60gxnG6DjAwJiS9+swoWj33/HFu8g8JVo

View file

@ -0,0 +1,36 @@
package main
func reverseParentheses(s string) string {
getParentheses := func() []int {
pairing := make([]int, len(s))
opened := make([]int, 0, len(s)/2)
for i, c := range s {
if c == '(' {
opened = append(opened, i)
} else if c == ')' {
var j int
j, opened = opened[len(opened)-1], opened[:len(opened)-1]
pairing[i] = j
pairing[j] = i
}
}
return pairing
}
pairing := getParentheses()
result := make([]byte, 0, len(s))
for i, d := 0, 1; i < len(s); i += d {
if s[i] == '(' || s[i] == ')' {
i = pairing[i]
d *= -1
} else {
result = append(result, s[i])
}
}
return string(result)
}