1513 - Number of Substrings With Only 1s
problem
Given a binary string s, return the number of substrings with all characters 1's. Since the answer may be too large, return it modulo 109 + 7.
Example 1:
Input: s = "0110111" Output: 9 Explanation: There are 9 substring in total with only 1's characters. "1" -> 5 times. "11" -> 3 times. "111" -> 1 time.
Example 2:
Input: s = "101" Output: 2 Explanation: Substring "1" is shown 2 times in s.
Example 3:
Input: s = "111111" Output: 21 Explanation: Each substring contains only 1's characters.
Constraints:
1 <= s.length <= 105s[i]is either'0'or'1'.
submission
// should be straight forward enough
impl Solution {
pub fn num_sub(s: String) -> i32 {
(s.as_bytes()
// chunk by different bytes
.chunk_by(|a, b| a == b)
.filter_map(|chunk| {
// check if this is a chunk of '1's
matches!(chunk, &[b'1', ..])
.then(|| {
// contribution of this chunk
chunk.len() * (chunk.len() + 1) / 2 % 1000000007
})
})
// accumulate
.sum::<usize>() % 1000000007) as i32
}
}