3.最长连续方波信号
输入一串方波信号,求取最长的完全连续交替方波信号,并将其输出,如果有相同长度的交替方波信号,输出任一即可,
说明:
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
输出
#华为机试#
方波信号高位用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)