1513. Number of Substrings With Only 1s
SourceWeekly Contest 197 Q2DifficultyMediumRating1351
Description
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'.
Solutions
Solution 1: Traversal and Counting
Thinking
Count substrings that contain only ones. \(n\le 10^5\), so we cannot list all \(O(n^2)\) substrings. Runs of ones separated by zeros are independent.
A run of length \(k\) contributes \(k(k+1)/2\) substrings, which is the same as maintaining the current run length \(cur\): each extra \(1\) increments \(cur\) and adds \(cur\) to the answer; a \(0\) resets it. No explicit segmentation is required.
We traverse the string \(s\), using a variable \(\textit{cur}\) to record the current count of consecutive 1s, and a variable \(\textit{ans}\) to record the answer. When we traverse to character \(s[i]\), if \(s[i] = 0\), then set \(\textit{cur}\) to 0; otherwise, increment \(\textit{cur}\) by 1, then add \(\textit{cur}\) to \(\textit{ans}\), and take modulo \(10^9 + 7\).
After the traversal is complete, return \(\textit{ans}\).
The time complexity is \(O(n)\), where \(n\) is the length of the string \(s\). The space complexity is \(O(1)\).
Similar problems:
1 2 3 4 5 6 7 8 9 10 11 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | |