字符串匹配

在前面的《最长公共子序列LCS问题》中,我们采用动态规划求解了两个字符串的最长公共子序列的问题,在《最长公共子串》中,我们又用动态规划解决了两个字符串的最长公共子串问题。其中公共子序列问题更加一般,它不要求匹配结果是连续的,公共子串相对特殊一点,它要求匹配连续的子串,二者都不要求其中一个字符串必须完全匹配。在《字典树》中,我们知道字典树也可以用来高效匹配字符串,首先它要求从头开始匹配,其次它匹配的必须是连续的字符串。如果是判断字符串是否相等,还可以利用hash算法。 本篇文章,我们介绍另外一种字符串匹配问题,文章最后对这几种匹配问题进行总结。其形式化定义如下:

假设文本是一个长度为n的数组T[1..n],而模式是一个长度为m的数组P[1..m],其中m<=n,进一步假设P和T的元素都来自一个有限的字母集的字符。

如果0 <= s <= n-m,并且T[s+1..s+m] = P[1..m],那么成模式P在文本T中出现,且偏移为s。如果P在T中以偏移s出现,那么称s是有效偏移;否则,称它是无效偏移。字符串匹配问题就是找到所有的有效偏移。

下面我们来看解决此问题的算法

1.朴素字符串匹配算法

该算法简单暴力,没有任何理解上的问题,伪代码如下:

NAIVE-STRING-NATCHER(T,P)

1. n = T.length

2. m = P.l

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值