题意:
给你一个二进制字符串 s(仅由 '0' 和 '1' 组成的字符串)。
返回所有字符都为 1 的子字符串的数目。
由于答案可能很大,请你将它对 10^9 + 7 取模后返回。
数据范围:
s[i] == '0' 或 s[i] == '1'
1 <= s.length <= 10^5
解法:
求出串中每个连续1的最大长度,设长度为len,那么答案累加len*(len+1)/2.
code:
class Solution {
public:
const static int mod=1e9+7;
int numSub(string s) {
int len=0;
int ans=0;
for(auto i:s){
if(i=='1')len++;
else{
ans+=1ll*len*(len+1)/2%mod;
ans%=mod;
len=0;
}
}
if(len){
ans+=1ll*len*(len+1)/2%mod;
ans%=mod;
}
return ans;
}
};