Python. Как убрать лишние / неправильные скобки в строке
Например, входная строка:
s = "fo)o)fus()(bar((em)ro(em))dah((y(XXX)"
В результате я ожидаю:
fus()((em)ro(em))dah(XXX)
Это как результат должен содержать все "здоровые" блоки, между которыми есть открытый "(" и закрытый ")" + "здоровый" текст. Все больные части должны быть удалены: "fo)" и "o)", потому что они не включены в "()" и не находятся между "()" или не включены в "()"
Еще один пример для проверки:
z = "))(OMG)123(()qwe(zxc)(ll"
должен вернуться(OMG)123()qwe(zxc)
Я буду, что это может быть решено как с re
Модуль как обычный скрипт. Но я понятия не имею, какой алгоритм следует использовать.
PS: я не откажусь от любой помощи.:)
1 ответ
Есть очень хороший пример использования стеков, и почти каждый студент CS решил это хотя бы один раз. Проверьте это в качестве примера, но вы можете найти гораздо лучший синтаксис (специально написанный для C++).
Эти решения обычно предназначены для проверки правильности утверждения или нет, но вы можете использовать ту же логику, чтобы удалить неправильные части и сохранить только те, которые соответствуют. Так что просто создайте новую строковую переменную (variable=""
), переберите строку и проверьте скобки, если они находятся в правильном месте, добавьте их в эту переменную. Чтобы проверить порядок скобок, используйте объект Stack, когда вы увидите открывающую скобку, поместите ее в стек и затем продолжите, когда она закроет единицу, затем вытолкните последнее значение из стека и проверьте (новый элемент )
и последний элемент в стеке должен быть (
). Если они не совпадают, отбросьте эту часть и продолжайте, если они совпадают, добавьте эту часть в строку.