朴素字符串匹配
问题描述:
先有一文本串T,一模式串P,找出P在T中首次出现的位置,若不存在返回-1。
算法思想:
若能在T中找到P那么则意味着 T[[i + j] = P[j],其中i代表T与P匹配时候的首字母下标,0<=j<length(P)。当T与P匹配失败的时候,将P向右滑动,依次将P与T所对应的字符进行匹配。大致过程如图所示:
其中红色字符代表匹配成功,灰色代表匹配失败。
核心代码:
1 int NaiveStringMatch(char* T,char* P) 2 { 3 //T为文本串,P为模式串 4 int tLen,pLen; 5 int i,j; 6 tLen = strlen(T); 7 pLen = strlen(P); 8 9 for(i = 0 ; i <= tLen-pLen; i++) 10 { 11 j = 0; 12 while(T[i+j] == P[j]) 13 { 14 j++; 15 if(j == pLen) 16 return i; 17 } 18 } 19 20 return -1; 21 }
时间复杂度分析:
在匹配的过程中模式串P需要与文本串T的每一个字符进行匹配,因此时间复杂度为O(n*m)。
博客内容未经声明均为原创,转载请注明出处。