字符串匹配算法有:暴力匹配、KMP、BM
KMP算法
先計算出要匹配的字符串的特徵數值(字符出現頻率高的字符串最長長度),依據特徵值指導字符跳轉。
BM算法
BM算法和KMP算法的差別是對模式串的掃描方式自左至右變成自右至左。另一個差別是考慮正文中可能出現的字符在模式中的位置。這樣做的好處是當正文中出現模式中沒有的字符時就可以將模式大幅度滑過正文。
BM算法的關鍵是根據給定的模式W[1,m],,定義一個函數d: x->{1,2,…,m},這裏x∈∑。函數d給出了正文中可能出現的字符在模式中的位置。
參考:https://www.cnblogs.com/huifeidezhuzai/p/9222366.html
KMP匹配算法
大致匹配流程
KMP依賴數據:
1、查找對象字符串的特徵值分析,所謂的特徵值就是字符出現頻率高的字符串最長長度,以數字表示頻率值;
2、源字符串、查找對象字符串;
上圖中查找對象字符串的特徵值計算方式如下:
KMP算法實現與優化
待補充完善
/* 獲取字符信息 */
void GetNext(char T[],int next[])
{
next[1]=0;
j=1;k=0;
while(j<=strlen(T))
{
//此處應包含string頭文件
if((k==0)||(T[j]==T[k]))
{
next[j]=k;
j++;
k++;
}
else
k=next[k];
}
}
int main()
{
int src[]={10,30,20,51,60,33};
}