算法训练Day9-KMP专题

2023年3月9日

#简单的模式匹配算法

字串的定位操作通常称为串的模式匹配,它求的是字串(常称模式串)在主串中的位置。这里采用定长顺序存储结构,给出一种不依赖于其他串操作的暴力匹配算法

int Index(SString S,SString T){ //s主串,T模式串
    int i=1,j=1;
    while(iT.length) return i-T.length;//匹配成功,返回当前字串的第一个位置
    else return 0;
}

简单来说,在暴力匹配中,每趟匹配失败都是模式后移一位再从头开始比较

#KMP算法

  1. 前缀:指除最后一个字符以外,字符串的所有头部字串

  1. 后缀:指除第一个字符以外,字符串的所有尾部字串

  1. 部分匹配值:字符串的前缀和后缀的最长相等前后缀长度

以“ababa”为例:

'a'的前缀和后缀都为空集,最长相等前后缀长度为0

'ab'的前缀为{a},后缀为{b},{a}∩{b}=空,最长相等前后缀长度为0

'aba'的前缀为{a,ab},后缀为{a,ba},{a,ab}∩{a,ba}={a},最长相等前后缀长度为1

'abab'的前缀为{a,ab,aba},后缀为{b,ba,bab},两个相交={ab},最长相等前后缀长度为2

同理,最后一个的最长相等前后缀长度为3

故字符串'ababa'的部分匹配值为00123

代码随想录中给的非常详细,建议配合视频进行学习 代码随想录 (programmercarl.com)

你可能感兴趣的:(C++,c++,leetcode,算法)