可以使用滑动窗口的思想,来获取连续1 的数量

# -*- coding: utf-8 -*-
"""
@Time    : 2023/5/16 10:26
@Author  : Frank
@File    : HJ86.py
"""


def prepare_data():
    num = input()
    return int(num)


def cov_bin(num: int) -> str:
    return bin(num)[2:]


def get_count(s: str):
    """

    使用滑动窗口
    # 连续1 的个数

    :param s:
    :return:
    """

    n = len(s)

    start = 0

    # 寻找第一次出现1 的位置
    while start < n and s[start] == '0':
        start += 1

    left = start
    right = left

    # 记录连续为1的个数,3,2,8
    res = []
    while left < n:

        while right < n:
            if s[right] == '1':
                right += 1
            else:
                break

        # 记录当前的窗口值
        cur_len = right - left
        res.append(cur_len)

        # 更新 left值
        while right < n:
            # 寻找下一次出现1 的位置
            if s[right] == '1':
                break
            else:
                right += 1
        left = right
        # print(f"cur left:{left}")

    return max(res) if res else 0


if __name__ == '__main__':
    # print(get_count(s='001110010110001'))

    num = prepare_data()
    s = cov_bin(num)
    print(get_count(s=s))
    pass

可以使用滑动窗口的思想,在一个窗口内保证全是连续的1 , 然后依次更新滑动窗口,找到所有连续1 的窗口长度,最后取最大值。