Una cadena equilibrada es una cadena de paréntesis ()
para que cada paréntesis se pueda combinar con otro. Más rigurosamente son las cadenas que abarca esta gramática:
S → (S)S | ε
Podemos convertir una cadena "de adentro hacia afuera" de la siguiente manera:
Cambio de todas las apariciones de
(
y)
con los demásMover caracteres desde el frente de la cadena hacia atrás hasta que la cadena se equilibre nuevamente.
Hagamos un ejemplo.
Comenzamos con la cadena equilibrada:
(()(())())
Luego cambiamos los parens para hacer
))())(()((
Luego mueva los caracteres desde el frente de la cadena hasta la parte posterior de la cadena hasta que la cadena esté equilibrada.
))())(()((
)())(()(()
())(()(())
))(()(())(
)(()(())()
(()(())())
Ese es nuestro resultado!
Tenga en cuenta que algunas cadenas pueden invertirse de varias maneras, por ejemplo, la cadena
(()())
Cuando se da la vuelta al revés puede ser:
()(())
o
(())()
Sin embargo, cada cadena tiene al menos una solución .
Tarea
Escriba un programa para tomar una cadena equilibrada como entrada y salida de esa cadena al revés. En los casos en que puede haber múltiples salidas válidas, solo necesita una de ellas. Puede usar un tipo de llave diferente ( <>
, []
o {}
) si lo desea.
Esta es una competencia de código de golf , por lo que debe intentar minimizar el tamaño de su código fuente, medido por bytes.
Casos de prueba
(()()) -> ()(()), (())()
(()(())()) -> (()(())())
((())())() -> (()(()()))