Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/420.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 有效括号故障排除_Javascript_Algorithm - Fatal编程技术网

Javascript 有效括号故障排除

Javascript 有效括号故障排除,javascript,algorithm,Javascript,Algorithm,我正在处理一个涉及有效括号的编码挑战,我正在尝试解决为什么它不能给我预期的响应 function isValid(str) { if (str.length === 0) return true let matchingOpeningBracket, char let stack = [] let openingBrackets = ['[', '<', '('] let closingBrackets = [']', '>', ')'] f

我正在处理一个涉及有效括号的编码挑战,我正在尝试解决为什么它不能给我预期的响应

 function isValid(str) {

  if (str.length === 0)
    return true

  let matchingOpeningBracket, char
  let stack = []

  let openingBrackets = ['[', '<', '(']
  let closingBrackets = [']', '>', ')']

  for (let i = 0; i < str.length; i++) {
    char = str[i]

    if (closingBrackets.indexOf(char) > -1) {
      matchingOpeningBracket = openingBrackets[closingBrackets.indexOf(char)]
      if (stack.length == 0 || (stack.pop() != matchingOpeningBracket)) {
        return false
      }
    } else {
      stack.push(char)
    }
  }

  return (stack.length == 0)
};
函数有效(str){
如果(str.length==0)
返回真值
让匹配开始括号,char
让堆栈=[]
让opening括号=['[',')']
for(设i=0;i-1){
匹配打开括号=打开括号[ClosingBrands.indexOf(char)]
if(stack.length==0 | |(stack.pop()!=匹配开始括号)){
返回错误
}
}否则{
stack.push(字符)
}
}
返回值(stack.length==0)
};
当我尝试检查console.log(isValid('-(++++)+-')和console.log(isValid('before(middle[])after'))时,它给了我一个假值,但根据质询键,它应该作为true传递。我不确定我缺少了哪一步。除前2步外,其他测试示例都按照此处所示进行了日志记录

//true // returns false
// let example1 = ("before(middle[])after")
//true //returns false
// let example1 = ("---(++++)---")
//true 
// let example1 = ("")
//false 
// let example1 = (")(")
//false
// let example1 = ("<(>)")
//true 
// let example1 = ("([<>()])")
//false
// let example1 = ("([)")
//true//返回false
//让我们举个例子1=(“之前(中间[])之后”)
//true//返回false
//让我们举个例子1=(“--”(+++++)--”)
//真的
//让示例1=(“”)
//假的
//例如,1=(“”(“”)
//假的
//例如,1=(“”)
//真的
//让我们举个例子1=(“([()])”)
//假的
//让我们举个例子1=(“([)”)

当您应该忽略既不是开始括号也不是结束括号的字符时,您正在将所有非结束括号的字符都推到堆栈上。请将else条件更改为:

else if (openingBrackets.indexOf(char) > -1) {
 

您正在将每个不是左括号的字符推送到堆栈上。您只想将左括号推送到堆栈上


请注意,只要字符串中有非括号字符,就会得到一个
false
结果。

我绝对不想让事情复杂化,所以我给出了一个简单的解决方案,如果您认为合适,可以使用它:)

函数有效(str){
如果(str.length==0)
返回真值
让char;
让堆栈=[];
让opening括号=['[',')']
匹配打开=(val)=>(val=='['| | val===''| | val==']))
getOpeningBracket=(val)=>{
开关(val){
案例']':
返回“[”;
案例“)”:
返回“(”;
案例“>”:
返回'