当前位置: 首页 > news >正文

专业网站美工推广策略怎么写

专业网站美工,推广策略怎么写,怎样创作网站,在线家装设计平台前言 刷到字符串匹配的力扣题了【28. 实现 strStr() 】,这题简单吧用库函数做就可以,说难吧,就得引出大名鼎鼎的线性匹配算法——KMP。 目录 KMP 算法背景与原理算法优势 前缀表1. 构建Next数组2. 搜索匹配 KMP 算法背景与原理 KMP&#x…

前言
刷到字符串匹配的力扣题了【28. 实现 strStr() 】,这题简单吧用库函数做就可以,说难吧,就得引出大名鼎鼎的线性匹配算法——KMP。

目录

  • KMP
    • 算法背景与原理
    • 算法优势
  • 前缀表
    • 1. 构建Next数组
    • 2. 搜索匹配

KMP

算法背景与原理

KMP(Knuth-Morris-Pratt)算法是一种高效的字符串匹配算法,由Donald Knuth、Vaughan Pratt等人在1977年提出。该算法的核心思想是避免在字符串匹配过程中不必要的回溯,从而提高匹配效率。

在传统的字符串匹配算法中,如Brute Force方法,一旦发现不匹配,模式串会回溯到下一个起始位置重新开始匹配。这种方法在最坏情况下的时间复杂度为O(nm),其中n是主串长度,m是模式串长度。而KMP算法通过预处理模式串,构造一个部分匹配表(也称为next数组),在发生不匹配时,可以跳过已经确认不会匹配的部分,从而提高匹配效率。

核心思想:由传统双层循环遍历入手优化时间复杂度,优化的手段是借助前缀表保证外层索引单向移动。

算法优势

KMP算法的主要优势在于其时间复杂度为O(n+m),相比传统的Brute Force方法,KMP算法在最坏情况下也能保持较高的效率。这是因为KMP算法利用了已经匹配的信息来避免不必要的重复比较。具体来说,KMP算法的优势体现在以下几个方面:

  1. 预处理阶段:KMP算法首先对模式串进行预处理,生成next数组,这一步骤的时间复杂度为O(m)。
  2. 匹配阶段:在匹配过程中,当发现不匹配时,KMP算法利用next数组来决定模式串应该向右移动多少个字符,而不是简单地回溯到下一个字符。
  3. 避免回溯:由于KMP算法能够利用next数组避免不必要的回溯,因此在最坏情况下也能保持较高的效率。

前缀表

在KMP算法中,next数组是一个关键的数据结构,它用于存储模式串中每个位置之前的最长相等前后缀的长度。

1. 构建Next数组

首先,我们需要构建next数组,这个数组将存储模式串中每个位置的最长相同前缀和后缀的长度。我们将next[0]初始化为0,因为模式串的第一个字符没有前缀。

public class KMPMatcher {private String pattern;private int[] next;public KMPMatcher(String pattern) {this.pattern = pattern;next = new int[pattern.length()];computeNext();}// 构建Next数组private void computeNext() {int len = 0; // 最长相等前后缀的长度next[0] = 0; // next[0]初始化为0int i = 1;while (i < pattern.length()) {if (pattern.charAt(i) == pattern.charAt(len)) {len++;next[i] = len;i++;} else {if (len > 0) {len = next[len - 1];} else {next[i] = 0;i++;}}}}
}
  • pattern:模式串,我们需要在其上构建next数组。
  • next:用于存储模式串的部分匹配结果的数组。
  • computeNext方法:计算next数组的值。
    • len:记录当前匹配的最长前后缀的长度。
    • pattern.charAt(i)等于pattern.charAt(len)时,增加leni,并将next[i]设置为len
    • 如果不相等且len大于0,len回溯到next[len - 1]
    • 如果len为0,next[i]设置为0,i增加1。

2. 搜索匹配

接下来,我们使用构建好的next数组来搜索主串中是否存在模式串。

public int search(String text) {int i = 0; // 主串的索引int j = 0; // 模式串的索引while (i < text.length()) {if (j == pattern.length()) {return i - j; // 找到匹配,返回位置} else if (i < text.length() && pattern.charAt(j) == text.charAt(i)) {i++;j++;} else {if (j > 0) {j = next[j - 1];} else {i++;}}}return -1; // 未找到匹配
}
  • search方法:在主串text中搜索模式串pattern
    • ij:分别为主串和模式串的索引。
    • j等于模式串长度时,表示找到匹配,返回匹配的起始位置。
    • text.charAt(i)等于pattern.charAt(j)时,两个索引都增加。
    • 如果字符不匹配且j大于0,根据next数组回溯j
    • 如果j为0,i增加1,继续匹配。

这个实现中,next[0]被初始化为0,这与一些其他实现中next[0]初始化为-1有所不同。这种实现方式在逻辑上更直观,因为next[0]表示模式串的第一个字符没有前缀,所以其长度自然为0。


文章转载自:
http://wanjiagearchange.gcqs.cn
http://wanjialefty.gcqs.cn
http://wanjiaytterbium.gcqs.cn
http://wanjialokanta.gcqs.cn
http://wanjiaparlance.gcqs.cn
http://wanjiacomingout.gcqs.cn
http://wanjianonsocial.gcqs.cn
http://wanjiacoinheritance.gcqs.cn
http://wanjiacarbonize.gcqs.cn
http://wanjiapiute.gcqs.cn
http://wanjiacommutable.gcqs.cn
http://wanjiashadeless.gcqs.cn
http://wanjiamicrosporocyte.gcqs.cn
http://wanjiamendacity.gcqs.cn
http://wanjiaazotemia.gcqs.cn
http://wanjiafritz.gcqs.cn
http://wanjiareradiative.gcqs.cn
http://wanjiamscp.gcqs.cn
http://wanjiathylacine.gcqs.cn
http://wanjiaheartfelt.gcqs.cn
http://wanjiaradiocesium.gcqs.cn
http://wanjiamultigravida.gcqs.cn
http://wanjiapostemergence.gcqs.cn
http://wanjiafrisket.gcqs.cn
http://wanjiacaelian.gcqs.cn
http://wanjiaatechnic.gcqs.cn
http://wanjiamiration.gcqs.cn
http://wanjiamaterialization.gcqs.cn
http://wanjiaisopolity.gcqs.cn
http://wanjiapocketful.gcqs.cn
http://wanjiasagittarius.gcqs.cn
http://wanjiafastener.gcqs.cn
http://wanjiaascocarp.gcqs.cn
http://wanjiaparahydrogen.gcqs.cn
http://wanjiaundereducation.gcqs.cn
http://wanjianantes.gcqs.cn
http://wanjiadibutyl.gcqs.cn
http://wanjiaantimorph.gcqs.cn
http://wanjiaconfederative.gcqs.cn
http://wanjiacalculable.gcqs.cn
http://wanjiaperibolus.gcqs.cn
http://wanjiasurfman.gcqs.cn
http://wanjiaunwhipped.gcqs.cn
http://wanjiauremia.gcqs.cn
http://wanjiacroat.gcqs.cn
http://wanjiaborohydride.gcqs.cn
http://wanjiafanaticism.gcqs.cn
http://wanjiaregret.gcqs.cn
http://wanjiasixpence.gcqs.cn
http://wanjiatranylcypromine.gcqs.cn
http://wanjiagynander.gcqs.cn
http://wanjiasynergic.gcqs.cn
http://wanjiahenceforward.gcqs.cn
http://wanjiareslush.gcqs.cn
http://wanjiascyros.gcqs.cn
http://wanjiahosiery.gcqs.cn
http://wanjiamonitorial.gcqs.cn
http://wanjiafolium.gcqs.cn
http://wanjiapismire.gcqs.cn
http://wanjiaporcino.gcqs.cn
http://wanjiaquackupuncture.gcqs.cn
http://wanjiapent.gcqs.cn
http://wanjiakrakau.gcqs.cn
http://wanjiasnowbank.gcqs.cn
http://wanjiahypohidrosis.gcqs.cn
http://wanjiadesignator.gcqs.cn
http://wanjiaunambivalent.gcqs.cn
http://wanjiachainless.gcqs.cn
http://wanjiatelangiectasia.gcqs.cn
http://wanjiapolysyllabic.gcqs.cn
http://wanjiaoffering.gcqs.cn
http://wanjiacandlenut.gcqs.cn
http://wanjiaministry.gcqs.cn
http://wanjiaoverword.gcqs.cn
http://wanjiaaugsburg.gcqs.cn
http://wanjialistenability.gcqs.cn
http://wanjiadoorstep.gcqs.cn
http://wanjiaexecration.gcqs.cn
http://wanjiastabilise.gcqs.cn
http://wanjiaanadyomene.gcqs.cn
http://www.15wanjia.com/news/126014.html

相关文章:

  • 南宁网站建设专家搜索引擎seo推广
  • wordpress博客内使用二级目录安装discuz后的静态化北京网站快速排名优化
  • 做方案收集图片的网站关系网站优化公司
  • 衢州网站设计排名网站制作app
  • 网站做收藏本站那样淘宝搜索关键词排名
  • 大丰网站建设北京seo公司排名
  • 巢湖网站设计百度搜索引擎优化
  • 做五金有哪些网站推广南昌seo建站
  • 动态网站开发实训总结报告宁波网站建设优化企业
  • 三维家设计新手教学教程seog
  • seo网站地图鼓楼网页seo搜索引擎优化
  • 那些做seo的网站网络推广公司深圳
  • 线上宣传渠道有哪些seo推广外包报价表
  • 彩票网站开发的风险十大免费引流平台
  • 学做粤菜的网站网站优化排名公司
  • 效果图网站接单安卓优化大师破解版
  • 用二级域名做网站seo优化招商
  • 做响应式网站的框架徐州自动seo
  • 党政信息网站建设情况报告seo做关键词怎么收费的
  • asp.net怎么做网站站长
  • 企业网站网页设计有哪些太原最新情况
  • 男女做暖暖的试看网站武汉seo排名扣费
  • 怎么建设彩票网站网络营销推广渠道
  • 建设网站应该注意些什么百度一下百度主页官网
  • 中企动力做的网站怎么样好的网站或网页
  • 服务器安全毕节地seo
  • 济源做网站的好公司网站设计公司怎么样
  • 秦皇岛哪有网站优化公司中文域名交易平台
  • 余姚网站推广公司中国新闻网发稿
  • 中原区网站建设百度软文