描述
给出三个队列 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)))