📌  相关文章
📜  仅包含 1 的二进制字符串的子字符串计数(1)

📅  最后修改于: 2023-12-03 15:21:51.183000             🧑  作者: Mango

仅包含 1 的二进制字符串的子字符串计数

介绍

给定一个二进制字符串,统计其中仅包含 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
总结

这道题考察了对字符串的遍历和计数的基本技能,还需要一定的逻辑思考能力。通过对题目的分析,我们可以找到一种非常巧妙的解法,大大降低了算法的时间复杂度。在实际编写代码时,需要注意边界条件的处理和变量名的定义,尽可能使代码简洁而易懂。