字符串的模式匹配

本文探讨了字符串模式匹配中的两种算法:BF(Brute-Force)暴力搜索算法和KMP算法。BF算法在最好情况下时间复杂度为O(m),而KMP算法的时间复杂度为O(n)。KMP算法得名于其三位发明者的名字首字母。文章提供了BF算法的双指针实现,并指出当匹配失败时,主串会回溯到原始起始位置。
摘要由CSDN通过智能技术生成

在这里插入图片描述

可以调用库函数 source.indexOf(target);

BF (Brute-Force) 暴力搜索算法,最好情况时间复杂度为O(m), 最差和平均时间复杂度为O(n * m)

KMP算法 时间复杂度O(n)
(为什么叫KMP,这个算法由三个人共同提出,KMP是3个人名字首字母的组合)

BF算法代码如下,双指针,匹配失败则回溯,主串回溯到原来的起始位置,
j-i(我前面有几个元素,我的索引就是几)
再往后一格 j-i+1

public class Solution {
    /**
     * @param source: 
     * @param target: 
     * @return: return the index
     */
    public int strStr(String source, String target) {
        // Write your code here
     //直接调用库函数  return source.indexOf(target); 较慢
     //bf算法,nm的时间复杂度  
     int i=0;
     int j=0;
     while(j<target.length()&&i<source.length()){
         if(source.charAt(i)==target.charAt(j)){
             i++;
             j++;
         }else{
             i=i-j+1;//i-j是“走过的source串”比“走过的
             //模式串”多出来的长度
             //其值等于source串这趟匹配的起始位置。
             //索引从0开始,我前面有几个元素,我的索引就是几
             //加1是匹配失败了,回溯后需要往后走一步
             j=0;
         }
     }
     if(j==target.length()){
         //退出匹配的原因是找到了
         return i-target.length();
     }else{
         return -1;
     }
     
}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值