Algorithm 给定一组大括号(包括打开大括号和关闭大括号),说明它是否';这是一个有效的字符串

Algorithm 给定一组大括号(包括打开大括号和关闭大括号),说明它是否';这是一个有效的字符串,algorithm,Algorithm,这是O(n)中非常简单的方法,但我被要求在不到O(n)的时间复杂度内完成 e、 g 如果n是字符串的长度,那么算法的复杂度不能小于O(n),因为如果算法没有检查任何字符,则无法确定该字符是否为大括号。所以,它不能小于O(n)。你可以预先计算出一些合理长度的所有好字符串,将它们放在一个巨大的哈希表中(实际上没有那么大,例如,最多12个字符字符串的所有好组合只需要10066个单元格),然后通过查看该表就可以进行每项检查 这可能适用于小字符串,在一般情况下非常有效,但是。。。在更坏的情况下,仍然是O(

这是O(n)中非常简单的方法,但我被要求在不到O(n)的时间复杂度内完成

e、 g


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

你可以预先计算出一些合理长度的所有好字符串,将它们放在一个巨大的哈希表中(实际上没有那么大,例如,最多12个字符字符串的所有好组合只需要10066个单元格),然后通过查看该表就可以进行每项检查


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

我假设嵌套也相关?ie
({)}
无效?此外,我无法想象如何在少于O(n)的时间内完成此操作,因为这是查看每个字符所需的最小值,我无法想象不查看每个字符就可以完成此操作的方法…您必须潜在地读取字符串中的每个字符,而该字符串本身就是O(n)。如果
n
是字符串的长度,我发现很难相信sub-
O(n)
是可能的-一般来说,你必须检查每个字符…也许检查字符串是否无效可以在不到O(n)的时间内完成。你确定这个问题是正确的吗?如果它是正确的,可能是吹毛求疵。我可能是内存使用的O(n)@AntonSizikov它确实说“O(n)时间复杂性”。就空间而言,我认为它应该在O(1)空间中可行。嗯,我不知道如何在O(1)内存中做到这一点。你不能在O(1)内存中做到这一点,因为常量内存计算类等于正则语言类,而平衡括号语言不是正则语言。@pkacprzak我不是真的听你的评论,但我相信你可以在O(1)内存中使用计数器来实现(我很确定我在不久前的某个时候已经做到了)。如果大括号是单一类型的,那么这将是一个很好的方法,我们可以存储可能的良好组合。
{({})} 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