问题696:给定一个字符串s
,计算具有相同数量0
和1
的非空(连续)子字符串的数量,并且这些子字符串中的所有0
和所有1
都是组合在一起的。重复出现的子串要计算它们出现的次数。
如下图所示,先遍历字符串,用一个列表存储字符串中连续0
和连续1
的数量,如下图所示。然后,对这个列表,每连续两项,取较小项的值,加到答案中。
完整代码:
class Solution(object):
def countBinarySubstrings(self, s):
groups = [1]
for i in range(1, len(s)):
if s[i-1] != s[i]:
groups.append(1)
else:
groups[-1] += 1
ans = 0
for i in range(1, len(groups)):
ans += min(groups[i-1], groups[i])
return ans
运行结果: