📅  最后修改于: 2023-12-03 15:21:51.183000             🧑  作者: Mango
给定一个二进制字符串,统计其中仅包含 1 的子字符串的数量。
比如,对于输入"00110011",有"01"、"0011"、"1100"、"10"和"00110011"这五个子字符串仅包含 1,因此输出为5。
这道题的解法比较巧妙,可以通过遍历一遍字符串,记录连续的 1 的个数,然后将相邻的两个计数器中较小的加入最终结果中。假设当前遍历到的字符是char,计数器为count,则有下面的代码:
if char == '1':
count += 1
else:
result += min(count, pre)
pre = count
count = 0
result += min(count, pre)
其中pre表示上一个连续的计数器的值。
class Solution:
def countBinarySubstrings(self, s: str) -> int:
count = 0 # 当前连续 1 的个数
pre = 0 # 前一个连续 1 的个数
result = 0 # 最终结果
for char in s:
if char == '1':
count += 1
else:
result += min(count, pre)
pre = count
count = 0
result += min(count, pre)
return result
这道题考察了对字符串的遍历和计数的基本技能,还需要一定的逻辑思考能力。通过对题目的分析,我们可以找到一种非常巧妙的解法,大大降低了算法的时间复杂度。在实际编写代码时,需要注意边界条件的处理和变量名的定义,尽可能使代码简洁而易懂。