2013-11-02 127 views
-3

我有一些特定的任务。我们有像“(()[] <>)”或类似的东西。 在我面试问题中的一个问题是如何检查字符串是正确还是不正确。 例如:“()[] <>” - true,“([)” - false,“[(])” - false,“([<>])” - true。 非常感谢你们!检查字符串是否正确

+2

。提示:使用 –

+0

尝试使用正则表达式类 – KernelPanic

+0

必须同意@JBNizet。堆栈绝对是解析表达式的最合适的方法,可以用正则表达式做同样的事情,但需要大量的lookahead和lookbeheads,这永远不是一个好方法。 –

回答

4

您将需要使用堆栈来处理此问题。

当你找到一个新的左括号时,你会推入堆栈。

当您找到右括号时,请查看堆栈顶部的元素 - 并查看它是否匹配。即如果你刚刚找到一个“)”,那么就是堆栈中的最后一个元素“(”?

如果是,那么弹出该堆栈的元素,如果不是,那么你得到“不正确”的字符串,你可以停止处理任何进一步的

而且,一旦你到了字符串的结尾,如果有什么事,我们知道有一个未终止的括号堆栈上