给定的括号字符串打开和关闭,告诉它是否是有效的字符串

时间:2013-08-02 08:57:09

标签: algorithm

这在O(n)中非常简单,但我被要求以低于O(n)的时间复杂度进行。

e.g。

{({})} is a valid string because each type of opening brace has a matching closing brace. 
while for {{{{)))} this is not as braces doesn't match  

2 个答案:

答案 0 :(得分:2)

如果n是字符串的长度,则算法复杂度不能小于O(n),因为如果算法没有检查任何字符,则无法确定字符是否为支撑与否。所以,它不能小于O(n)。

答案 1 :(得分:0)

你可以将所有好的字符串预先计算到一个合理的长度,把它们放在一个巨大的哈希表中(实际上并不是那么大,例如,最多12个字符的字符串的所有良好组合只需要10066个单元格)然后只需查看该表即可完成每项检查。

这可能适用于小字符串,并且在一般情况下会非常有效,但......在更糟糕的情况下它仍然是O(n)。