Back to all solutions

#2533 - Number of Good Binary Strings

Problem Description

You are given four integers minLength, maxLength, oneGroup and zeroGroup.

A binary string is good if it satisfies the following conditions:

  • The length of the string is in the range [minLength, maxLength].
  • The size of each block of consecutive 1's is a multiple of oneGroup.
    • For example in a binary string 00110111100 sizes of each block of consecutive ones are [2,4].
  • The size of each block of consecutive 0's is a multiple of zeroGroup.
    • For example, in a binary string 00110111100 sizes of each block of consecutive zeros are [2,1,2].

Return the number of good binary strings. Since the answer may be too large, return it modulo 109 + 7.

Note that 0 is considered a multiple of all the numbers.

Solution

/**
 * @param {number} minLength
 * @param {number} maxLength
 * @param {number} oneGroup
 * @param {number} zeroGroup
 * @return {number}
 */
var goodBinaryStrings = function(minLength, maxLength, oneGroup, zeroGroup) {
  const MOD = 1e9 + 7;
  const dp = new Array(maxLength + 1).fill(0);
  dp[0] = 1;

  for (let i = 1; i <= maxLength; i++) {
    if (oneGroup <= i) {
      dp[i] = (dp[i] + dp[i - oneGroup]) % MOD;
    }
    if (zeroGroup <= i) {
      dp[i] = (dp[i] + dp[i - zeroGroup]) % MOD;
    }
  }

  let result = 0;
  for (let i = minLength; i <= maxLength; i++) {
    result = (result + dp[i]) % MOD;
  }

  return result;
};