擅长:python、mysql、java
<p>我以为这个问题需要递归地解决,所以我做到了:</p>
<pre><code>def check(needle, haystack):
if not needle:
return True
try:
offset = haystack.index(needle[0])
return check(needle[1:], haystack[offset+1:])
except:
return False
</code></pre>
<p>编辑:</p>
<p>简要说明:</p>
<p>首先,我们检查要查找的列表是否为空(这在我们开始调用自己时很重要),因为所有列表中都有空列表,所以我们返回True。然后我们试着在列表中找到我们要查找的第一项。如果我们找到了它,我们会再次调用函数,但是稍微改变一下参数:我们已经看了“针”的第一项,并在“草堆”中看到了它。所以现在我们需要检查“针”的剩余部分是否在“干草堆”的剩余部分。因此,我们只对两个列表的其余部分再次调用该函数。针的剩余部分是除了第一个元素以外的所有东西,而干草堆的剩余部分则是我们找到的那个之后的所有物品。如果我们到了第一个列表为空的地步,那就意味着我们在大海捞针中找到了它。如果我们得到一个异常,我们正在寻找的东西找不到,所以我们返回False,它在调用堆栈中冒泡并返回。</p>