-1

例如输入字符串:

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:我不会拒绝任何帮助。:)

4

1 回答 1

1

使用堆栈有一个很好的例子,几乎每个 CS 学生都至少解决了一次。将此作为示例进行检查,但您可以找到更好的语法(专门为 C++ 编写)。

这些解决方案通常用于检查语句是否正确,但您可以使用相同的逻辑删除错误的部分并仅保存匹配的部分。所以只需创建新的字符串变量(variable=""),遍历字符串并检查括号,如果它们在正确的位置,然后将它们添加到该变量中。要检查括号顺序,请使用 Stack 对象,当您会看到左括号将其推入堆栈然后继续,当它将关闭一个时,然后从堆栈中弹出最后一个值并检查(新项目是)堆栈中的最后一个项目应该是()。如果它们不匹配,则丢弃该部分并继续,如果它们匹配则将该部分添加到字符串中。

于 2017-03-17T15:00:11.083 回答