字符串匹配.pptxVIP

  • 12
  • 0
  • 约2.76千字
  • 约 26页
  • 2016-07-27 发布于浙江
  • 举报
字符串匹配

字符串匹配;给定一个长度不超过n的长字符串A和若干个长度不超过m的短字符串B1…Bm 对于每个短字符串,找出它在长字符串中出现的所有位置。 例:ababcababcabc ababc 则返回0,5;枚举全部n个起始位置,依次进行字符串匹配。 时间复杂度:O(nm) 每次字符串匹配没有利用前一次的结果 如何利用字符串B的一个已匹配前缀来减少比较次数?;;假设当前匹配以第i位为起始位置,0~k位匹配成功,k+1位匹配失败。 则以第i+j位为起始位置,0~k-j位可以匹配成功的条件是字符串B的0~k-j位和j~k位相同。 若j=1时不满足,则可以跳过以接下来1位为起始位置的匹配,以此类推。;定义next[]数组,对于字符串B长度为i的前缀,next[i]取值为:小于i,且令其长度为next[i]的前缀和后缀为相同字符串的最大值。 例:ababc i 1 2 3 4 5 next[i] 0 0 1 2 0 若从第i位开始,前3位(aba)匹配成功,第4位匹配失败,则无需从第i+1位开始,因为前2位的ba必然无法匹配ab,而从第i+2位开始,前1位的a可以匹配a。;使用:当前匹配位数为k而出现匹配失败时,将当前匹配位数直接改为next[k],继续在A的相同位置匹配,若仍匹配失败就继续改为next[next[k]]… 生成: 若B串第i位和第next[i]位相同,则next[i+1]=ne

文档评论(0)

1亿VIP精品文档

相关文档