Given a binary string s
(a string consisting only of '0' and '1's).
Return the number of substrings with all characters 1's.
Since the answer may be too large, return it modulo 10^9 + 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.
Example 4:
Input: s = "000" Output: 0
Constraints:
s[i] == '0'
ors[i] == '1'
1 <= s.length <= 10^5]
class Solution { public int numSub(String s) { int mod = 1000000007; int len = 0; int res = 0; char[] arr = s.toCharArray(); for(int i = 0; i < arr.length; i++){ if(arr[i] == '1'){ len++; res = (res + len) % mod; } else len = 0; } return res % mod; } }
看连续1的数量,比如111,res就是1+2+3,遇到0就重置0
总结:
We see that for a string with all 1 like 111, it has substring of all 1's like 1, 1,1 11, 11, 111. Totally 6 which is made by 1 + 2 + 3
So we iterate the string, when it's 1 we make len++, res = (res+len)%mod, when it's 0 we make len = 0. Finally we get the answer.