cpp
class Solution {
public:
int numSub(string s) {
int mod = 1e9 + 7;//取模值,防止答案溢出
int result = 0;//最终结果(所有符合条件的子串总数)
int cnt = 0;//记录当前连续'1'的长度
for (char c : s) {//遍历字符串的每个字符
if (c == '1') {//当前字符为'1'
cnt++;//连续'1'的长度加1
// 累加新增的子串数:长度为 cnt 的连续 '1' 比长度为 cnt-1 时多 cnt 个新子串
// (例如从 "11" 到 "111",新增的子串是 "1"(第三个1)、"11"(后两个1)、"111"(三个1),共 3 个)
result = (result + cnt) % mod;
} else {//当前字符为'0'
cnt = 0;//连续'1'中断,重置计数
}
}
return result;
}
};
今天这个题目比较简单,想清楚就比较好做了,主要是对连续'1'字符串数量的相加,记得取模!