字符串匹配算法

作者: 凌霄文强 | 来源:发表于2019-03-08 21:12 被阅读0次

字符串匹配问题指的是从一个大字符串S中寻找是否包含小的串s,如果包含找到起始位置。或者说从主串中寻找模式串。
在牛客网上有该题:(串的模式匹配)
题目描述
对于两个字符串A,B。请设计一个高效算法,找到B在A中第一次出现的起始位置。若B未在A中出现,则返回-1。
给定两个字符串A和B,及它们的长度lena和lenb,请返回题目所求的答案。
测试样例
"acbc",4,"bc",2
返回:2

朴素的字符串匹配算法

朴素的字符串匹配算法也就是能直接想到的算法,将大字符串的每一个字符和小字符串做匹配,类似于小字符串是一个滑动窗口,每次滑动1,看是否相等。

class StringPattern:
    def findAppearance(self, A, lena, B, lenb):
        # write code here
        for i in range(lena-lenb+1):
            flag=0
            for j in range(lenb):
                if A[i+j]!=B[j]:
                    flag=1
                    break
            if flag==0:
                return i
        return -1

时间复杂度是O(m*n)


KMP

通过设定一个next数组,当匹配失败时可以跳转到一定的位置继续比较。

class StringPattern:
   def getNext(self, A, lena):
       i=0
       j=-1
       next=[-1]
       while i<lena:
           if j==-1 or A[i]==A[j]:
               i+=1
               j+=1
               next.append(j)
           else:
               j=next[j]
       return next
   
   def findAppearance(self, A, lena, B, lenb):
       # write code here
       next=self.getNext(B,lenb)
       i=0
       j=0
       while i<lena and j<lenb:
           if j==-1 or A[i]==B[j]:
               if j==lenb-1:
                   return i-lenb+1
               i+=1
               j+=1
           else:
               j=next[j]
       return -1

相关文章

  • 字符串匹配

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

  • KMP字符串匹配算法

    KMP字符串匹配算法 先总结一下之前的几种字符串匹配算法 1 BF算法, 最简单的字符串匹配算法, 可以直接使用s...

  • KMP算法文章合集

    字符串的查找:朴素查找算法和KMP算法 暴力匹配算法与KMP算法(串的匹配) 字符串查找算法BF和KMP 字符串匹...

  • 一些有关算法的

    字符串模式匹配算法 字符串的KMP算法详解部分匹配表(即)向右移一位就可以得到next数组。字符串模式匹配算法 R...

  • 字符串匹配算法

    场景:字符串A为主串,字符串B为模式串,比较字符串B是否能够在字符串A中进行匹配? 匹配算法:BF算法和RK算法。...

  • 字符串匹配算法

    以下为学习 《数据结构与算法之美 -- 字符串匹配》 的记录。 BF算法 即暴力匹配算法,循环遍历匹配。 RK算法...

  • 2022-01-25

    1.字符串匹配BM算法 在文本中查找字符串匹配算法,坏字符串规则和好后缀规则坏字符串规则: 从后往前匹配,第一个不...

  • 20-字符串匹配

    字符串匹配 这章节,我们会讲到几大典型的字符串匹配算法 BF算法 BF算法是最最符合正常人逻辑思维的一种匹配模式,...

  • leetcode字符串匹配算法之KMP算法

    本篇介绍一种高效的字符串匹配算法——KMP算法。 KMP算法是一种改进的字符串匹配算法,由D.E.Knuth,J....

  • 中文分词的方法

    1、基于字符串匹配的方法 1.1 正向最大匹配分词算法1.2 逆向最大匹配分词算法1.3 双向最大匹配分词算法1....

网友评论

    本文标题:字符串匹配算法

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