给定一个只含有0和1的字符串,要求求其中所有由1构成的子串的个数。
思路:
假设当前从[l,r]均是1,那么新加入一个1,新加的子串可以认为是新加的1单独构成,以及和前面[l,r]的1构成,即如果[l,r]的长度为len,则新加一个1,新构成的子串的个数为len+1。因此,只需要找到每一个从1开始的字符串,按照上面的规律进行计算即可。
class Solution {
public:
int numSub(string s) {
long long ans=0;
const int mod=1e9+7;//防止超出int范围
int len=0;//用于保存当前全是1的字符串的总长度
for(int i=0;i<s.size();i++)
{
if(s[i]=='1')
{
len++;
ans=ans+len;
}
else
{
len=0;
}
}
return ans%mod;
}
};