Code Kata #5

11254 ワード

質問する
sは、複数の括弧からなるStringパラメータである.true/false、sが有効かどうかを返してください.
「(」、「)」、「[」、「]」、「{」、「}」の6種類があります.次の場合に有効です.かっこを開始するには、同じカッコで終了します.かっこの順序は正しいです.
例:
s = "()"
return true

s = "()[]{}"
return true

s = "(]"
return false

s = "([)]"
return false

s = "{[]}"
return true
解決する
一緒に問題を解いた同級生のおかげで、やっと問題を解いた.各かっこを数値に変換し、加算時に論理を0に書き出し、条件を追加してフィルタします.オブジェクトのキー値にアクセスする方法...私はもっとin文を勉強すべきだと思います.
function isValid(s) {
  const center = (s.length / 2) - 1;
  const obj = {
    '(' : 1,
    ')' : -1,
    '[' : 2,
    ']' : -2,
    '{' : 3,
    '}' : -3,
  }
  let answer = 0;
  const first = s.split('')[0];
  if(obj[first] < 0) {
    return false;
  } else if (Math.abs(obj[s[center]]) !== Math.abs(obj[s[center+1]])) {
    return false;
  } else {
    for(let i in s) {
      answer += obj[i];
    }
  }
    return !answer;
}
console.log(isValid('([)]'));
次の論理は私が解いている方法です.sを配列に変換し、カッコの前の順序とカッコの後ろの順序が正しい場合はtrueを返します.
s = "()[]{}"
return true
上記の条件は通らなかった.
function isValid(s) {
  let arrS = s.split("");
    let result = 0;
    //console.log(arrS);
    //console.log(arrS[0]);
    for (let i = 0; i <= arrS.length; i++) {
      if (arrS[i] === "(" && arrS[arrS.length - (i+1)] === ")" ) {
        result = true;
      } else {
        result = false;
      }
      if (arrS[i] === "{" && arrS[arrS.length - (i+1)] === "}" ) {
        result = true;
      } else {
        result = false;
      }
      if (arrS[i] === "[" && arrS[arrS.length - (i+1)] === "]" ) {
        result = true;
      } else {
        result = false;
      }
    } return result;
}