题目:合法出栈序列
描述
给定一个由大小写字母和数字构成的,没有重复字符的长度不超过62的字符串x,现在要将该字符串的字符依次压入栈中,然后再全部弹出。
要求左边的字符一定比右边的字符先入栈,出栈顺序无要求。
再给定若干字符串,对每个字符串,判断其是否是可能的x中的字符的出栈序列。
输入
第一行是原始字符串x
后面有若干行(不超过50行),每行一个字符串,所有字符串长度不超过100
输出
对除第一行以外的每个字符串,判断其是否是可能的出栈序列。如果是,输出"YES",否则,输出"NO"
样例输入
abc
abc
bca
cab
样例输出
YES
YES
NO
AC代码
def isPopSeq(s1,s2):
stack = []
if len(s1) != len(s2):
return False
else:
L = len(s1)
stack.append(s1[0])
p1,p2 = 1,0
while p1 < L:
if len(stack) > 0 and stack[-1] == s2[p2]:
stack.pop()
p2 += 1
else:
stack.append(s1[p1])
p1 += 1
return "".join(stack[::-1]) == s2[p2:]
s1 = input()
while True:
try:
s2 = input()
except:
break
if isPopSeq(s1,s2):
print("YES")
else:
print("NO")