一.暴力(C)
一旦比较失败,将会将haystack指针调整至下一个「发起点」,needle的指针调整至起始位置,然后重新尝试匹配
int strStr(char* haystack, char* needle)
{
int n = strlen(haystack), m = strlen(needle);
for (int i = 0; i + m <= n; i++) //i遍历haystack,如果needle比haystack还没遍历的字母
{ //长度要长,返回-1
bool flag = true;
for (int j = 0; j < m; j++) //遍历needle,如果相等了就继续往后比较,不等就退出循环
{
if (haystack[i + j] != needle[j]) //同时平移向后比较
{
flag = false;
break; //退出for循环
}
}
if (flag)
{
return i;
}
}
return -1;
}
二.KMP算法
KPM算法是三位大牛同时发现的:D.E.Knuth,J.H.Morris,V.R.Pratt
下面是这个算法的图解原理👇