累積和メニュー【区間内の個数 (文字列) 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 文字目までの累積和)を出力
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 文字目までの累積和)を出力
});
文字列 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 文字目までの累積和)を出力
});
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 文字目までの累積和)を出力
});
str の 文字数が N 文字になったのでカウンタ変数 i の範囲が i < N になりました。
コメント