美文网首页
字符串匹配

字符串匹配

作者: 愿你我皆是黑马 | 来源:发表于2021-07-16 23:57 被阅读0次

朴素算法=BF算法=暴力算法


KMP算法

  • 去除朴素算法中 配对不上的 和 已配对过的 比较过程

  • 什么是KMP中的next数组

    1. next数组的用途
      next记录着:匹配子串的每个下标位往前数,有几个字符和匹配开头连续一样。这个数值可以在匹配到该下标时,直接跳过前面下标位个数的比较,直接比较子串的第下标位置和被匹配字符串的下一个字符。

    2. 代码实现计算next数组

      publib int[] 获取next数组(String 匹配子串){
      
         int[] next数组=new int[匹配子串.length];
         next数组[0]=-1;//由于匹配从1开始,所以初始化next数组的一个数据
         
         int 匹配子串的下标=1;
         int next数组的对应下标=0;
         
         while(匹配子串的下标<匹配子串.length){
                 if(next数组的对应下标==0||匹配子串.charAt(匹配子串的下标)==匹配子串.cartAt(next数组的对应下标)){
                         next数组[++匹配子串的下标]=++next数组的对应下标;
                 }else{
                         next数组的对应下标=next[next数组的对应下标];//这是关键部分:通过相同子串的交换关系,不断将匹配范围缩小
                 }
         }
      }
      
  • 使用next数组进行字符串匹配

    
    public void matcher(char[] str,char subStr){
        int[] next=new int[subStr.length()]; //根据子串生成next数组
        int i=0;//str字符串匹配到第i个字符
        int j=0;//子串匹配到第j个字符
        while(i<str.length()&&j<subStr.length()){
            if(str[i]==subStr[j]){ //
                i++;
                j++;
            }else if(j==-1){
                i++;
                j=0;
            }else{
                j=next[j];
            }
        }
        //跑完上面循环:1 被查字符串str都走完了,2 匹配到最后一个子串字符了
        
        if(j==subStr.length()){ //如果是匹配到最后一个字符了,表示匹配成功了
            return i-j;
        }else{
            return -1;
        }
    }
    
  • next数组的缺点,什么是nextval数组

BM算法

RK算法

相关文章

  • 大数据算法系列9:字符串匹配问题,海量字符串处理

    一. 字符串匹配 1.1 字符串匹配 字符串匹配:字符串匹配在实际工作中经常遇到,但是我们经常使用的是编程语言自带...

  • Python算法-字符串(String)

    字符串匹配问题字符串匹配(String Matching):又称为模式匹配(Pattern Matching)。可...

  • 正则表达式

    匹配位置: \b:单词的开头或者结束,单词的分界处^:匹配字符串的开始$:匹配字符串的结束 匹配字符 .:匹配除换...

  • iOS 字符串

    1、字符串的截取 2、匹配字符串 从字符串(sd是sfsfsAdfsdf)中查找(匹配)字符串(Ad) 3、字符串...

  • 字符串匹配

    indexOf 底层就是使用字符串匹配算法 字符串匹配算法很多 BF( Brute Force)算法 暴力匹配算...

  • 正则表达式

    基础语法 元字符^ 匹配行或者字符串的起始位置$ 匹配行或者字符串的结束位置\s 匹配空格\d 匹配数字\w 匹配...

  • iOS 字符串截取、iOS 字符串替换、iOS 字符串分隔、iO

    iOS之字符串截取、iOS 字符串替换、iOS字符串分隔、iOS之字符串匹配、截取字符串、匹配字符串、分隔字符串 ...

  • 正则表达式

    元字符 ^ 匹配字符串的开始$ 匹配字符串的结束. 匹配除换行符以外的任意字符\w 匹配字母或数字或...

  • R学习笔记(7):使用stringr处理字符串(2)

    目标:结合正则表达式,实现 确定与某种模式匹配的字符串找出匹配位置提取匹配内容替换匹配内容基于匹配拆分字符串 1....

  • django 使用nginx 配置静态文件

    1.Nginx location匹配规则 = /uri/ ——字符串精确匹配^~ /uri/ ——字符串前缀匹...

网友评论

      本文标题:字符串匹配

      本文链接:https://www.haomeiwen.com/subject/rnpipltx.html