JavaScript循环神秘地更新字符串的值

标签 javascript algorithm

我构建了一个函数,它根据一些输入返回 "YES""NO"。 输入是一串应该平​​衡的括号。

例子:

平衡 - { [ ( ) ] }
非平衡 - { [ ( ] ) }

该函数为此调用返回 undefined

isBalanced('{[(])}');

厌倦了调试。我确定循环内部有问题。

function isBalanced(s) {
    let brackets = s.split('');
    let balanced = "YES";
    const closedBrackets = ')]}';
    const bracketCompliment = {
        '(' : ')',
        '[' : ']',
        '{' : '}'
    };
    for(let idx = 0; idx < brackets.length; idx++){
        const item = brackets.splice(0, 1)[0];
        if(closedBrackets.includes(item)){
            balanced = "NO";   
            return;
        }
        const closeIdx = brackets.indexOf(bracketCompliment[item]);
        const remainder = closeIdx % 2;
        if(closeIdx === -1 || remainder !== 0){
            balanced = "NO";
            return;
        } else{
            brackets.splice(closeIdx, 1);
        }
    }
    return balanced;
}

最佳答案

你应该return balanced; 而不是return;

function isBalanced(s) {
  let brackets = s.split('');

  const closedBrackets = ')]}';

  const bracketCompliment = {
    '(': ')',
    '[': ']',
    '{': '}',
  };

  for (let idx = 0; idx < brackets.length; idx += 1) {
    const item = brackets.splice(0, 1)[0];

    if (closedBrackets.includes(item)) {
      return 'NO';
    }

    const closeIdx = brackets.indexOf(bracketCompliment[item]);

    if (closeIdx === -1 || closeIdx % 2 !== 0) {
      return 'NO';
    }
    
    brackets.splice(closeIdx, 1);
  }

  return 'YES';
}

console.log(isBalanced('{[(])}'));
console.log(isBalanced('{()}'));

关于JavaScript循环神秘地更新字符串的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51951985/

相关文章:

java - 编写一个程序来压缩字符串

algorithm - 如何在 Clojure 中删除向量中的顺序匹配项?

javascript - 如何向 Javascript tabify 链接添加额外的超链接?

javascript - 如何在我的代码中修复 addEventListener?好像随时取消

javascript - 开源 javascript 编辑器/设计器,可拖动的字体和图像框?

javascript - 在 ember.js 中将参数传递给 init

python - 从列表构建集合的复杂性?

javascript - 为什么这个列表排序器会崩溃?

javascript - 获取可缩放旭日中可见的根节点

algorithm - Patience Diff - 最后阶段对于非独特线路到底做了什么?