确定一个序列是否在另一个序列中的最佳方法?

发布于 2021-01-29 16:37:48

这是将“字符串包含子字符串”问题推广到(更多)任意类型的问题。

给定一个序列(例如列表或元组),确定另一个序列是否在其中的最佳方法是什么?另外,它应该返回子序列开始处的元素的索引:

用法示例(序列顺序):

>>> seq_in_seq([5,6],  [4,'a',3,5,6])
3
>>> seq_in_seq([5,7],  [4,'a',3,5,6])
-1 # or None, or whatever

到目前为止,我只是依靠蛮力,它看起来缓慢,丑陋且笨拙。

关注者
0
被浏览
206
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    我第二次使用Knuth-Morris-Pratt算法。顺便说一句,您的问题(和KMP解决方案)正是Python
    Cookbook
    2nd
    Edition中的配方5.13
    。您可以在http://code.activestate.com/recipes/117214/中找到相关代码。

    它找到给定序列中的 所有 正确子序列,并应将其用作迭代器:

    >>> for s in KnuthMorrisPratt([4,'a',3,5,6], [5,6]): print s
    3
    >>> for s in KnuthMorrisPratt([4,'a',3,5,6], [5,7]): print s
    (nothing)
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看