1. 最长方连续方波信号---OD

# 一个完整的信号是以0开头0结尾的,即010是一个完整信号,101、1010、0101都不是
# 输入一串方波,由一个或多个完整信号组成
# 两个相邻信号之间可能有0个或者多个低位,如0110010、011000010
# 同一信号可以有连续高位如01110101011110001010
# 完整连续方波是指10交替,如01010是完整连续交替方波,0110不是
#
# 输入:信号字符串
# 输出最长连续交替方波串,若不存在输出-1
# 输入: 0010101010110000101000010
#
# 输出: 01010


import sys


def solve_method(in_str):
    bits = list(in_str)
    waves = []

    first = in_str.find("1")  # 左边开始找到第一个1
    last = in_str.rfind("1")  # 右边开始第一个1
    i = first

    while i <= last:
        if i + 1 < len(bits) and bits[i] == "0" and bits[i + 1] == "0":  # 从左往右找到00
            print(first - 1, i + 1, in_str[first - 1:i + 1])
            waves.append(in_str[first - 1:i + 1])  # first-1表示左边第一个1的前一位

            while i < len(bits) and bits[i] == "0":  # 跳过i之后的0,找到下一个1
                i += 1
            first = i  # 找到下一个1的位置
        else:
            i += 1  # 从左往右找00,没找到继续往后找
    waves.append(in_str[first - 1:last + 2])  # 添加最后一个符合条件的完整型号010
    print('waves',waves)  # waves ['010101010110', '01010', '010']
    res = []
    for wave in waves:
        n0, n1 = 0, 0
        for c in wave:
            if c == "0":
                n0 += 1
            else:
                n1 += 1
        if n0 - n1 == 1:  # 过滤掉010101010110这种
            res.append(wave)

    res.sort(key=len, reverse=True)
    if res:
        print(res[0], end="")
    else:
        print("-1", end="")


if __name__ == "__main__":
    in_str = sys.stdin.readline().strip()
    solve_method(in_str)


  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值