区間内の個数 (文字列)《累積和》

累積和メニュー【区間内の個数 (文字列) 1 〜 4】

【区間内の個数 (文字列) 1】コード

const str = 'bwwbwbbwbwbb';
const b = [];
const s = [0];  // ″b″ の数の累積和
for (let i = 0; i < 10; i++) {
   str[i] === 'b' ? b.push(1) : b.push(0);  // ″b″ なら b.push(1), さもなくば b.push(0)
   s.push(s[i] + b[i]);  // s[i + 1] = s[i] + b[i]
}
  // b = [ 1, 0, 0, 1, 0, 1, 1, 0, 1, 0 ]
  // s = [ 0, 1, 1, 1, 2, 2, 3, 4, 4, 5, 5]
console.log(s[8] - s[2]);  // (8 文字目までの累積和 - 2 文字目までの累積和)を出力
hogeちゃんの画像

for文で 文字列 を一文字ずつ調べて ″b″ なら b.push(1)。″b″  でなければ b.push(0)。同時進行で s.push(s[i] + b[i])

【区間内の個数 (文字列) 2】コード

reader.on('close', () => {
   const str = lines[0];
   const b = [];
   const s = [0];  // ″b″ の数の累積和
   for (let i = 0; i < 10; i++) {
      str[i] === 'b' ? b.push(1) : b.push(0);  // ″b″ なら b.push(1), さもなくば b.push(0)
      s.push(s[i] + b[i]);  // s[i + 1] = s[i] + b[i]
   }
   console.log(s[8] - s[2]);  // (8 文字目までの累積和 - 2 文字目までの累積和)を出力
});
hogeちゃんの画像

文字列  str を入力から受け取っています。それ以外は 【STEP: 1】と同じ。

【区間内の個数 (文字列) 3】コード

reader.on('close', () => {
   const [X, Y] = lines[0].split(' ').map(Number);
   const str = lines[1];
   const b = [];
   const s = [0];  // ″b″ の数の累積和
   for (let i = 0; i < 10; i++) {
      str[i] === 'b' ? b.push(1) : b.push(0);  // ″b″ なら b.push(1), さもなくば b.push(0)
      s.push(s[i] + b[i]);  // s[i + 1] = s[i] + b[i]
   }
   console.log(s[Y] - s[X - 1]);  // (Y 文字目までの累積和 - X 文字目までの累積和)を出力
});
hogeちゃんの画像

X 文字目から Y 文字目まで の 個数を求めるので s[Y] - s[X - 1] を出力。

【区間内の個数 (文字列) 4】コード

reader.on('close', () => {
   const [N, X, Y] = lines[0].split(' ').map(Number);
   const str = lines[1];
   const b = [];
   const s = [0];  // ″b″ の数の累積和
   for (let i = 0; i < N; i++) {
      str[i] === 'b' ? b.push(1) : b.push(0);  // ″b″ なら b.push(1), さもなくば b.push(0)
      s.push(s[i] + b[i]);  // s[i + 1] = s[i] + b[i]
   }
   console.log(s[Y] - s[X - 1]);  // (Y 文字目までの累積和 - X 文字目までの累積和)を出力
});
hogeちゃんの画像

str の 文字数が N 文字になったのでカウンタ変数  i の範囲が i < N になりました。

コメント