2020年网易算法笔试题第四题python实现
优秀的01序列
1 如果序列S,T是优秀的,则序列S+T是优秀的,+被定义为按数学连接两个序列,即”010”+”110”=”010110”
2 如果序列S是优秀的,则序列rev(S)也是优秀的。rev(S) 被定义为按位翻转(0变1,1变0)序列S,并删去前导零。例如rev(” 1100101”)=“11010”
现在请你判断序列T是不是优秀的
输入描述
第一行数据组数T,表示有T组数据
每组数据的第一行是一个01序列,表示序列S。第二行是另一个01序列,表示序列T
1<=|S|,|T|<=1000,S,T不含前导零。
输出描述
对于每组数据,一行输出 YES或 NO,表示序列T是不是优秀的(大小写敏感)
示例
输入
1
1100
110011
输出
YES
示例2
输入
1
1000
100001111
输出
NO
n = int(input())
for i in range(n):
S = input()
T = input()
ST = S + T
S_list = list(S)
ST_list = list(ST)
all_S = []
while S_list:
all_S.append(''.join(S_list))
for j, value in enumerate(S_list):
if value == '1':
S_list[j] = '0'
else:
S_list[j] = '1'
while S_list and S_list[0] == '0':
S_list.pop(0)
while ST_list:
for j, value in enumerate(ST_list):
if value == '1':
ST_list[j] = '0'
else:
ST_list[j] = '1'
while ST_list and ST_list[0] == '0':
ST_list.pop(0)
if ''.join(ST_list) in all_S:
print('YES')
break
else:
print('NO')
以上为个人思考结果,未经严格验证,如有错误还望见谅和指正。 利用正则表达式进行判断,T是否属于S利用规则二所形成的序列集合所构成的(规则一)
但是python中是不包含判断字符串是否符合某个正则表达式的方法用search代替,通过设定限制进行,因此可能会有问题
import re
n = int(input())
for i in range(n):
S = input()
T = input()
S_list = list(S)
T_list = list(T)
all_S = []
while S_list:
all_S.append(''.join(S_list))
for j, value in enumerate(S_list):
if value == '1':
S_list[j] = '0'
else:
S_list[j] = '1'
while S_list and S_list[0] == '0':
S_list.pop(0)
print(all_S)
gz = '(' + '|'.join(all_S) + ')' + '+'
pattern = re.compile(gz)
res = pattern.search(T)
print(res[0])
if res and res[0] == T:
print('YES')
else:
print('NO')
OPPO公司福利 1202人发布