例如输入字符串:
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
模块一样解析为常规脚本。但我不知道应该使用哪种算法。
答案 0 :(得分:1)
使用堆栈有很好的例子,几乎每个CS学生至少解决了一次。以this为例,您可以找到更好的语法(专为C ++编写)。
这些解决方案通常用于检查语句是否正确,但您可以使用相同的逻辑删除错误的部分并仅保存匹配的部分。因此,只需创建新的字符串变量(variable=""
),迭代字符串并检查括号,如果它们在正确的位置,则将它们添加到该变量。要检查括号顺序,请使用Stack对象,当您看到打开括号将其推送到堆栈然后继续,当它将关闭一个时,然后从堆栈中弹出最后一个值并检查(新项目为)
并且堆栈中的最后一项应为(
)。如果他们不匹配,扔掉那部分并继续,如果匹配则将该部分添加到字符串。