Number of Substrings With Only 1s

medium string math counting

Problem

Given a binary string s, return the number of substrings whose characters are all 1. The answer may be large, so return it modulo 109 + 7.

Inputs = "0110111"
Output9
"1" appears 5 times, "11" 3 times, "111" once: 5 + 3 + 1 = 9.
Inputs = "111111"
Output21
A single run of length 6 gives 6·7/2 = 21 all-ones substrings.

def num_sub(s):
    MOD = 10**9 + 7
    ans = 0
    count = 0
    for ch in s:
        if ch == '1':
            count += 1
            ans = (ans + count) % MOD
        else:
            count = 0
    return ans
function numSub(s) {
  const MOD = 1000000007n;
  let ans = 0n, count = 0n;
  for (const ch of s) {
    if (ch === '1') {
      count += 1n;
      ans = (ans + count) % MOD;
    } else {
      count = 0n;
    }
  }
  return Number(ans);
}
int numSub(String s) {
    final int MOD = 1_000_000_007;
    long ans = 0, count = 0;
    for (int i = 0; i < s.length(); i++) {
        if (s.charAt(i) == '1') {
            count++;
            ans = (ans + count) % MOD;
        } else {
            count = 0;
        }
    }
    return (int) ans;
}
int numSub(string s) {
    const long long MOD = 1000000007;
    long long ans = 0, count = 0;
    for (char ch : s) {
        if (ch == '1') {
            count++;
            ans = (ans + count) % MOD;
        } else {
            count = 0;
        }
    }
    return (int) ans;
}
Time: O(n) Space: O(1)