当前位置: 代码迷 >> 综合 >> 小米OJ python实现交叉队列
  详细解决方案

小米OJ python实现交叉队列

热度:55   发布时间:2023-10-23 04:29:07.0

描述

给出三个队列 s1,s2,s3 ,判断 s3 是否是由 s1 和 s2 交叉得来。 如:s1 为 aabcc , s2 为 dbbca。 当 s3 为 aadbbcbcac 时,返回 true(即将 s1 拆成三部分: aa,bc,c 分别插入 s2 对应位置) 否则返回 false。

输入

aabcc,dbbca,aadbbcbcac

输出

true

输入样例

aabcc,dbbca,aadbbcbcac
aabcc,dbbca,aadbbbaccc
a,b,ab
a,b,ba
a,b,ac
abc,bca,bcaabc
abc,bca,aabbcc

输出样例

true
false
true
true
false
true
false
import sys
result = []
for line in sys.stdin:a,b,c = line.strip().split(",")len1, len2, len3 = len(a), len(b), len(c)flag = Truei = 0j = 0if len1 + len2 != len3:   # 如果长度不匹配,直接不合格flag = Falseelse:for k in range(len3):
##            print(a[i],b[j],c[k],a,b,c)if i <= len1 - 1 and j <= len2 - 1:  # 栈a,b都还存在元素if a[i] == b[j] == c[k]:         # 两栈的元素相等if j != len2 - 1 and b[j+1] == c[k+1]: j += 1elif i != len1 - 1 and a[i+1] == c[k+1]:i += 1else:i += 1elif a[i] == c[k]:             i += 1elif b[j] == c[k]:j += 1elif a[i] != c[k] and b[j] != c[k]:flag = Falsebreakelif i >= len1 and j >= len2 and k <= len3: # 两个栈都为空,但c不为空flag = Falsebreakelif i <= len1 - 1 and j >= len2:    # 栈a不为空if a[i] == c[k]:i += 1elif a[i] != c[k]:flag = Falsebreakelif j <= len2 - 1 and i >= len1:    # 栈b不为空if b[j] == c[k]:j += 1elif b[j] != c[k]:flag = Falsebreak
##            print(i,j,k)if flag == True:result.append("true")else:result.append("false")print("\n".join(map(str, result)))

 

  相关解决方案