Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用python实现后缀数组中的模式搜索功能_Python_List_Search_Design Patterns - Fatal编程技术网

使用python实现后缀数组中的模式搜索功能

使用python实现后缀数组中的模式搜索功能,python,list,search,design-patterns,Python,List,Search,Design Patterns,我想写一个函数:例如,sequential_research(M,L),它使用研究的原理 sequential在后缀L列表中,返回第一个元组的位置,例如M是的前缀 此元组的后缀(如果存在);否则,函数将返回None 我尝试了这个方法,但只针对一个字符串,而不是一个字符串列表 def get_prefix_arr(pattern, b): prefix_arr = [0] * b n = 0 m = 1 while m != b: if patter

我想写一个函数:例如,sequential_research(M,L),它使用研究的原理 sequential在后缀L列表中,返回第一个元组的位置,例如M是的前缀 此元组的后缀(如果存在);否则,函数将返回None

我尝试了这个方法,但只针对一个字符串,而不是一个字符串列表

def get_prefix_arr(pattern, b):
    prefix_arr = [0] * b
    n = 0
    m = 1
    while m != b:
        if pattern[m] == pattern[n]:
            n += 1
            prefix_arr[m] = n
            m += 1
        elif n != 0:
            n = prefix_arr[n - 1]
        else:
            prefix_arr[m] = 0
            m += 1
    return prefix_arr

def KMP_String(pattern, text):
    a = len(text)
    b = len(pattern)
    prefix_arr = get_prefix_arr(pattern, b)
    initial_point = []
    m = 0
    n = 0

    while m != a:
        if text[m] == pattern[n]:
            m += 1
            n += 1
        else:
            n = prefix_arr[n - 1]
        if n == b:
            initial_point.append(m - n)
            n = prefix_arr[n - 1]
        elif n == 0:
            m += 1

    return initial_point


string = "TATCTAGCTA"
pat = "CTA"
initial_index = KMP_String(pat, string)
for i in initial_index:
        print("{}: {}".format(i, string[i:]))

我找到了一个解决方案你有没有尝试需要帮助?您能否至少提供一些输入/输出示例?关于允许/应该使用什么方法等,是否有任何限制?这是您没有尝试过的作业吗?请参阅和。您共享的代码到底出了什么问题?