假设我们有一个二进制字符串 s。我们必须找到所有字符都是 1 的子串的数量。答案可能非常大,因此返回结果 mod 10^9 + 7。
因此,如果输入类似于 s = "1011010",那么输出将是 5,因为 1. 四次 "1" 2. 一次 "11"
为了解决这个问题,我们将按照以下步骤操作 -
米:= 10^9+7
结果:= 0
div := 通过使用 '0' 分割二进制字符串来分割它
对于 div 中的每个 x,执行
如果 x 为空,则进行下一次迭代
结果 := 结果 + (x 的大小 *(x 的大小 +1))/2 的商
返回结果 mod m
让我们看看以下实现以获得更好的理解 -
def solve(s): m = 10**9+7 result = 0 for x in s.split('0'): if not x: continue result += (len(x)*(len(x)+1)) // 2 return result % m s = "1011010" print(solve(s))
"1011010"输出结果
5