背景
基于我四岁的孩子从他的拉比那里得到的游戏。
“目标”是按给定顺序(例如)“查找”字母aecdb
。会给您一堆字母卡片,例如daceb
。您只能按给定的顺序搜索堆栈,尽管是循环的。遇到需要的信件时,可以将其取出。
目的
给定一个顺序和一个堆栈(彼此无重复排列),找到在玩游戏时看到的最高堆栈字母的序列(都是可打印的ASCII)。
分步示例
aecdb
给定堆栈,我们需要找到订单daceb
:
栈顶d
:不是我们想要的(a
),因此我们将其添加到序列:中d
并旋转以获取栈:acebd
。
堆栈顶部a
:是的!因此我们将其添加到序列中:da
并将其从堆栈中删除:cebd
。
栈顶c
:不是我们想要的(e
),因此我们将其添加到序列:中dac
并旋转以获取栈:ebdc
。
堆栈顶部e
:是的!因此我们将其添加到序列中:dace
并将其从堆栈中删除:bdc
。
栈顶b
:不是我们想要的(c
),因此我们将其添加到序列:中daceb
并旋转以获取栈:dcb
。
栈顶d
:不是我们想要的(c
),因此我们将其添加到序列:中dacebd
并旋转以获取栈:cbd
。
堆栈顶部c
:是的!因此我们将其添加到序列中:dacebdc
并将其从堆栈中删除:bd
。
栈顶b
:不是我们想要的(d
),因此我们将其添加到序列:中dacebdcb
并旋转以获取栈:db
。
堆栈顶部d
:是的!因此我们将其添加到序列中:dacebdcbd
并将其从堆栈中删除:b
。
堆栈顶部b
:是的!因此我们将其添加到序列中:dacebdcbdb
并将其从堆栈中删除:。
我们完成了。结果是dacebdcbdb
。
参考实施
def letters(target, stack):
string = ''
while stack:
string += stack[0]
if stack[0] == target[0]:
stack.pop(0)
target = target[1:]
else:
stack.append(stack.pop(0))
return string
print letters('aecdb', list('daceb'))
测试用例
try
,yrt
→yrtyry
1234
,4321
→4321432434
ABCDEFGHIJKLMNOPQRSTUVWXYZ
,RUAHYKCLQZXEMPBWGDIOTVJNSF
→RUAHYKCLQZXEMPBWGDIOTVJNSFRUHYKCLQZXEMPWGDIOTVJNSFRUHYKLQZXEMPWGIOTVJNSFRUHYKLQZXMPWGIOTVJNSRUHYKLQZXMPWIOTVJNSRUYKLQZXMPWOTVNSRUYQZXPWOTVSRUYQZXPWTVSRUYQZXWTVSRUYZXWTVSUYZXWTVUYZXWVYZXWYZXYZ
?
,?
→?
a
,a
→a a
abcd
,abcd
→abcd
99
特别注意?