题目地址:
https://leetcode.com/problems/number-of-substrings-with-only-1s/description/
给定一个长 n n n的 01 01 01字符串 s s s,问其 1 1 1子串总共有多少个。答案模 1 0 9 + 7 10^9+7 109+7返回。
代码如下:
class Solution {
public:
using ll = long long;
int numSub(string s) {
constexpr int MOD = 1e9 + 7;
ll res = 0;
for (int i = 0; i < s.size(); i++) {
if (s[i] == '1') {
int j = i;
while (j < s.size() && s[j] == '1') j++;
res = (res + (ll)(j - i) * (j - i + 1) / 2) % MOD;
i = j;
}
}
return (int)res;
}
};
时间复杂度 O ( n ) O(n) O(n),空间 O ( 1 ) O(1) O(1)。