3.最长连续方波信号

输入一串方波信号,求取最长的完全连续交替方波信号,并将其输出,如果有相同长度的交替方波信号,输出任一即可,
方波信号高位用1标识,低位用0标识,如图:

说明:
1) 一个完整的信号一定以0开始然后以0结尾,即010是一个完整信号,但101,1010,0101不是
2)输入的一串方波信号是由一个或多个完整信号组成
3) 两个相邻信号之间可能有0个或多个低位,如0110010,011000010
4) 同一个信号中可以有连续的高位,如01110101011110001010,前14位是一个具有连续高位的信号
5) 完全连续交替方波是指10交替,如01010是完全连续交替方波,0110不是
输入描述
输入信号字符串(长度 >= 3 且 <= 1024):
0010101010110000101000010
注:输入总是合法的,不用考虑异常情况
输出描述
输出最长的完全连续交替方波信号串:01010
若不存在完全连续交替方波信号串,输出 -1。
示例1  输入输出示例仅供调试,后台判题数据一般不包含示例
输入
00101010101100001010010
输出
01010

先声明一下,这个是我遇到的机考题,题目给的测试用例我也不明白为什么输出的不是010101010而是01010。。
我的代码过不了这个测试用例,但是后台那些用例反而全部通过了。
s = input()
# dp[i]表示以s[:i]最长的交替信号长度
dp = [0] * len(s)
for i in range(2, len(s)):
    if s[i] == '0' and s[i-1] == '1' and s[i-2] == '0':
        if dp[i-2] == 0:
            dp[i] = 3
        else:
            dp[i] = dp[i - 2] + 2
print(dp)
num = max(dp)  # 找到最长的交替信号长度,必定是0开头0结尾的奇数,题目要求输出原信号就按这个长度补就行了
s = ""
while num:
    s += "0"
    num -= 1
    if num == 0:
        break
    s += "1"
    num -= 1
print(s)



#华为机试#
全部评论
表示没怎么看明白
点赞
送花
回复 分享
发布于 2022-10-10 10:42 陕西

相关推荐

1 1 评论
分享
牛客网
牛客企业服务