O(n)子字符串算法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了O(n)子字符串算法相关的知识,希望对你有一定的参考价值。

所以我一直在研究子字符串搜索算法,发现大多数算法(例如kmp和rabin-karp算法)在进行某些字符串匹配之前,都需要额外的时间复杂度来进行预处理。这样做有什么好处吗?为什么他们不直接跳到立即匹配的字符串,以使big-O时间复杂度不会降至O(m + n)?我尝试通过简单地跳过预处理时间来创建一个我相信是O(n)的子字符串算法(如果我错了,请纠正我)。我想知道为什么人们不这样做,请参考下面的C代码。

int search(char hay[], char needle[], int hayLen, int needleLen)
    int found;
    int i = 0;

    while (i < (hayLen - needleLen + 1))
        if (hay[i] == needle[0])
            found = 1;
            for (int j=0; j<needleLen; j++)
                if (hay[i] != needle[j])
                    found = 0;
                    break;
                
                i++;
            
            if (found)
                return i - needleLen;
        
        else
            i++;
    
    return -1;

编辑:

删除了strlen函数以避免任何不必要的时间复杂性

以上是关于O(n)子字符串算法的主要内容,如果未能解决你的问题,请参考以下文章

Manacher算法最长子回文串

Manacher 算法详解:O(n) 复杂度求最长回文子串

Manacher 算法详解:O(n) 复杂度求最长回文子串

最长公共子序列针对小字符集的算法

最长公共子序列针对小字符集的算法

马拉车算法详解