朴素字符串匹配

问题描述:

先有一文本串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)。

 

posted @ 2013-09-20 09:35  Howey  阅读(176)  评论(0编辑  收藏  举报