Uma cadeia equilibrada é uma cadeia de parênteses ()
para que todos os parênteses sejam encontrados com outro. Mais rigorosamente, são as cadeias abrangidas por esta gramática:
S → (S)S | ε
Podemos transformar uma string "de dentro para fora":
Alternando todas as ocorrências
(
e)
entre siMovendo caracteres da frente da string para trás até que a string seja equilibrada novamente.
Vamos fazer um exemplo.
Começamos com a string balanceada:
(()(())())
Em seguida, trocamos os parênteses para fazer
))())(()((
Em seguida, mova os caracteres da frente da cadeia para a parte de trás da cadeia até que ela esteja equilibrada.
))())(()((
)())(()(()
())(()(())
))(()(())(
)(()(())()
(()(())())
Esse é o nosso resultado!
Observe que algumas seqüências de caracteres podem ser viradas do avesso de várias maneiras, por exemplo, a sequência
(()())
Quando virado do avesso, pode ser:
()(())
ou
(())()
No entanto, cada string tem pelo menos uma solução .
Tarefa
Escreva um programa para pegar uma string equilibrada como entrada e saída dessa string virada do avesso. Nos casos em que pode haver várias saídas válidas, você precisa apenas produzir uma delas. Você pode usar um tipo de chave diferente ( <>
, []
ou {}
) se desejar.
Como é uma competição de código-golfe , você deve minimizar o tamanho do seu código-fonte, medido por bytes.
Casos de teste
(()()) -> ()(()), (())()
(()(())()) -> (()(())())
((())())() -> (()(()()))