Задачи
October 14
Задача. Реверс подстрок между скобками
Задача. Дана строка, состоящая из строчных английских букв и скобок.
Сделайте реверс подстроки в каждой паре скобок, начиная с самой внутренней. Получившуюся строку верните без скобок.
2. S = "(u(love)i)"
Output: "iloveu"
Разбор
Для начала создадим подфункцию для реверса произвольной строки. Ключом к быстрому решению будет использование стэка.
Идея заключается в том, чтобы сохранять позиции открывающихся скобок в стеке. Тогда для каждой закрывающейся скобки мы берем элемент из стека (позиция последней открывающейся скобки) и делаем реверс полученной подстроки.
Реализация
static string ReverseParentheses(string s) { var stack = new Stack<int>(); StringBuilder res = new StringBuilder(); for (int i = 0; i < s.Length; i++) { if (s[i] == '(') { // сохраняем позицию открывающейся скобки stack.Push(res.Length); } else if (s[i] == ')') { // берем позицию последней открывающейся скобки int start = stack.Pop(); // делаем реверс подстроки Reverse(res, start, res.Length - 1); } else { res.Append(s[i]); } } return res.ToString(); }
https://gist.github.com/unilecs/cea7e9c58a124368aac03438d6fadc02