質問: 0) { stack.push(brackets[bracketPosition+1]); } ``` 3、 // スタックが空でないのを返す???少し意味がわかりませんでした。 ``` return !stack.length; ``` の箇所です。 全体文も日本語訳を付けたので そちらも含め間違っている箇所をご指摘いただきますと助かります。 何卒よろしくお願い申し上げます。
回答: 問題文の日本語訳をそのまま解釈すると、(),[],<>の括弧の組み合わせが矛盾なく記述されているかをチェックする関数を作れ、という意味だと思います。 つまり、 1)括弧の開始と終了が対になっている。 〇 aaaa(bbbbb)cccc × aaaa(bbbb(cccc) 2)括弧で囲まれた範囲が別の括弧の範囲と交わらない(内部に含むものはOK) 〇 aaaa(bbbb[cccc]dddd) × aaaa(bbbb[cccc)dddd] というようなことをチェックすればよいと思います。 質問の追記を受けてですが、 > > 1、// このスタックがなぜ必要なのかわかりません。。。 > > > > ``` > stack = []; > > ``` > > これは単純に、スタック用の配列を宣言しているだけです。 今回の問題と混同しそうですが。 > > > ``` > // brackets、bracket、bracketPositionに()[]{}を代入 > var brackets = "()[]{}", > bracket, > bracketPosition, > // このスタックがなぜ必要なのかわかりません??? > stack = []; > > ``` > > この部分、変数を宣言するのにカンマで区切って行っています。つまり ``` var brackets = "()[]{}"; var bracket; var bracketPosition; var stack = []; ``` と同じことです。`brackets`は文字列、`bracket`,`bracketPosition`はなんらかのオブジェクト、`stack`は配列です。 > > 2、// bracketPositionが2の倍数で割り切れる時、つまりカッコがネストされている時、 > > // スタックの中に???をプッシュする。この???の部分がわかりません。 > > > > ``` > if (bracketPosition %2 === 0) { > stack.push(brackets[bracketPosition+1]); > } > > ``` > > 1.の質問と合わせて考えると、ループでbrackets配列の文字を順番に取り出して、bracketに入れています。その位置が2で割り切れるとき、というのは括弧の最初の文字"(","[","{"を指します。つまり、文字列を先頭から調べて、括弧を構成する文字が見つかった場合、それが先頭だったらその文字をstackに入れておく、という処理です。 > > 3、 // スタックが空でないのを返す???少し意味がわかりませんでした。 > > > > ``` > return !stack.length; > > ``` > > 文字列内の括弧がちゃんとルール通り閉じていれば、`stack.length`は0になるはずなので、そうならない場合はエラーと判別できる、ということです。trueとfalseに合わせるため"!"(not)を付けています。