查找字符串中的非相邻子序列

时间:2012-06-01 17:24:29

标签: string-search

假设我在字符串中搜索一个子序列,其中元素不一定必须相邻,但必须在N个字符内。所以,

search("abc","aaabbbccc",7) => True
search("abc","aabbcc",3) => False

我正在寻找一种能够执行此比较的高效数据结构/算法。我可以想到一些方法,比如搜索内部通配符的所有有效组合,比如

search("abc",whatever,4) => "abc","a*bc","ab*c"

使用任何多字符串搜索算法(可能是Aho–Corasick),但我想知道是否有更好的解决方案。

1 个答案:

答案 0 :(得分:1)

我附加了一个python代码示例,可以执行您想要的操作。它遍历要搜索的字符串,如果找到搜索字符串的第一个字母,则创建length = max_length的子字符串并将其发送到另一个函数。此函数只是在子字符串中移动,试图按顺序查找所有搜索字符串字母。如果它找到all,那么它返回True,否则返回False。

def check_substring(find_me, substr):
    find_index = 0
    for letter in substr:
        if find_me[find_index] == letter:
            find_index +=1
        # if we reach the end of find_me, return true
        if find_index >= len(find_me):
            return True
    return False

def check_string(find_me, look_here, max_len):
    for index in range(len(look_here)):
        if find_me[0] == look_here[index]:
            if check_substring(find_me, look_here[index:index + max_len]):
                return True
    return False



fm = "abc"
lh = "aabbbccceee"
ml = 5

print check_string(fm, lh, ml)