模式匹配

模式匹配最基本的思想就是源字符串的每个字符和子串的每个字符进行比较,

其实现方法如下:

 int Index(char* S, char* T, int slen,int tlen,int pos)
{
int i=pos,j=0;
while(i<slen && j<tlen)
{
if (*(S+i) ==*(T+j))
{
i++;
j++;
}
else
{
i = i - j + 2;
j = 1;

}
if (j == tlen)
{
return i-tlen;
}sdfsfdpoj.rerrjije
else 
return -1;
}


还有一种方法:KMP方法。

它是通过计算next的值记性移动,所以比上一种方法快速。

j=0 ,next[j] = -1;

j>0时,若0<k<j,存在'p0p1……pk'  ='pj-k……pj-1'

next[j] = Max(k);否则,next[j] = 0.


next的计算值是j所指的字符的前面若干个字符串的匹配,

如果前面n个字符中的第1个和第n个相等,则next[j] 取1,

如果第1,2个字符和第n-1,n个字符相等,怎next[j]取2,

依次类推……

例如:string s = “ababcabcacbab”

j=0,next[j] = -1;

j =1,next[j]=0;

j=2,k取1,则比较s[0]和s[1],a!=b,next[j]=0;

j=3,k取1,s[0]和s[2]比较,a = a,

      k取2,s[0]s[1]和s[1]s[2]比较  ab!=ba

      k的最大取值是1,next[j] = 1;

以此类推……     




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

daiyier

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值