如何检查括号是否平衡?

时间:2019-06-18 20:32:31

标签: php parentheses braces

编写一个名为validBraces的函数,该函数采用一串花括号,并确定花括号的顺序是否有效。如果字符串有效,validBraces应该返回true,如果无效则返回false。

所有输入字符串将为非空,并且仅由开括号(,闭括号),开括号[,闭括号],大括号组成{和大括号}

什么才是有效的?

如果所有括号都与正确的括号匹配,则一串括号被视为有效。例如:

(){}[]([{}])被认为是有效的,而(}[(])[({})](]被认为是无效的。

Specification
validBraces(braces)

检查大括号顺序是否有效

参数
花括号:String-花括号顺序的字符串表示形式

返回值
布尔值-如果括号的顺序有效,则返回true

示例:

    Input   Output
validBraces( "(){}[]" )     true
validBraces( "(}" )         false
validBraces( "[(])" )       false
validBraces( "([{}])" )     true

2 个答案:

答案 0 :(得分:0)

这是非常琐碎的分配,您可以使用堆栈(即数组/列表)。然后,您逐字符遍历输入字符串char,一旦检测到开括号((<{等),便将该括号压入堆栈(或追加到数组中),没关系)。并且当遇到右括号()>}等)时,会从堆栈中弹出最后一个元素。然后,您检查方括号类型是否匹配,因此当您拥有>时,应该从堆栈中弹出<,否则您将停止抱怨方括号不匹配(或其他原因)的过程。一旦完成迭代而没有任何错误,您的堆栈应该为空。如果需要知道是否处理过任何括号,可以使用计数器/标志。

答案 1 :(得分:-1)

创建一个变量,该变量以“(”的数量递增,然后从该数字递减 -= 对于每个“)”,如果该变量为 = 0,则括号是平衡的。对不同类型的括号重复相同的操作。