所以我一直在研究子字符串搜索算法,发现大多数算法(如 kmp 和 rabin-karp 算法)在进行一些字符串匹配之前需要额外的时间复杂度来预处理时间。这样做有什么好处吗?为什么他们不直接跳到字符串匹配,以使大 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 函数以避免任何不必要的时间复杂度