数据结构笔记chapter04_2

本文介绍了朴素匹配算法和KMP算法在模式匹配中的应用。朴素算法在匹配失败时会回溯,造成时间开销。KMP算法通过next数组优化,避免了主串指针回溯,平均时间复杂度降低到O(n+m)。nextval数组进一步优化了匹配效率。
摘要由CSDN通过智能技术生成

4.2.1 朴素匹配算法

子串:主串中一定存在

模式串:想尝试在主串中寻找的串,未必存在

串的模式匹配:在主串中找到与模式串相同的子串,并返回其所在位置

(1)基本操作实现模式匹配

Index(S,T):定位操作。若主串S中存在与串T值相同的子串,则返回它在主串S 中第一次出现的位置;否则函数值为0

//用Sub返回串S的第pos个字符串起长度为len的子串
bool SubString(SString,&Sub,SString S,int pos,int len){
    
    //子串范围越界
    if(pos+len-1>S.length)
      return false;
    for(int i=pos;i<pos+length;i++)
      Sub.ch[i-pos+1]=S.ch[i];
    Sub.length=len;
    return true;
}

//若主串S中存在与串T值相同的子串,则返回第一次出现的位置,否则为0
int Index(SString  S,SString T){
    int i=1,n=StrLength(S),m=StrLength(T);
    SString sub;
    while (i<=n-m+1){
        SubString(sub,S,i,m);
        if(StrCompare(sub,T)!=0) ++i;
        else return i;  //返回子串在主串中的位置
    }
    return 0; //S中不存在与T相等的子串
}

(2)朴素模式匹配算法

即简单模式匹配算法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值