背景
基于我四岁的孩子从他的拉比那里得到的游戏。
“目标”是按给定顺序(例如)“查找”字母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特别注意?