如何验证括号'((()))''?

Max*_*fen -3 javascript algorithm

我上次接受下一个任务时遇到了问题:

制作将验证括号计数的功能,如果每个打开括号将具有关闭括号(如()(((())))) - 验证必须是true,以其他方式(如(()(()()))) - 必须false.

我的意思是开括号的数量必须等于近括号的数量.

如果有人可以解释我必须如何工作,我会很高兴.谢谢!

function validator(brackets) {
  ...// some code
} 

const goodBrackets = '(((())))';
const badBrackets = '(()())))';
const veryBadBrackets = '(()())()))';

validator(goodBrackets);
validator(badBrackets);
validator(veryBadBrackets);
Run Code Online (Sandbox Code Playgroud)

Kai*_*dul 11

这可以使用堆栈完成,但这不是必需的(额外内存).要检查余额,您将只需要一个计数器,(如果遇到任何计数器将递增,如果遇到任何计数器则递减).在任何时候,如果你遇到一个)并且计数器小于1,这意味着你没有任何(匹配当前右括号.所以它无效.最后,如果counter为0则表示表达式是平衡的.

我不知道javascript,这是某种伪代码:

function validator(string expression) {
    count := 0
    for(int i = 0; i < expression.length; i++) {
        if(expression[i] == '('):
            count++
        else if(expression[i] == ')'):
            if(count == 0):
                return false
            else:
                count--
    }

    if(count == 0):
        return true

    return false
}
Run Code Online (Sandbox Code Playgroud)