Medium
Number of Ways to Split a String — C++
Full explanation · Time O(n) · Space O(1)
// Time: O(n)
// Space: O(1)
class Solution {
public:
int numWays(string s) {
static const int MOD = 1e9 + 7;
int ones = count_if(cbegin(s), cend(s),
[](const auto& x) {
return x == '1';
});
if (ones % 3) {
return 0;
}
ones /= 3;
if (ones == 0) {
return static_cast<int64_t>(s.length() - 1) * (s.length() - 2) / 2 % MOD;
}
int count = 0, left = 0, right = 0;
for (const auto& c : s) {
if (c == '1') {
++count;
}
if (count == ones) {
++left;
} else if (count == 2 * ones) {
++right;
}
}
return static_cast<int64_t>(left) * right % MOD;
}
};