可以使用滑动窗口的思想,来获取连续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 的窗口长度,最后取最大值。