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

早晨网站建设a做爰视频免费网站

早晨网站建设,a做爰视频免费网站,门户网站建设基础术语,wordpress文章总是发布失败这个马拉车算法Manacher‘s Algorithm是用来查找一个字符串的最长回文子串的线性方法#xff0c;由一个叫Manacher的人在1975年发明的#xff0c;这个方法的最大贡献是在于将时间复杂度提升到了线性#xff0c;这是非常了不起的。对于回文串想必大家都不陌生#xff0c;就是…这个马拉车算法Manacher‘s Algorithm是用来查找一个字符串的最长回文子串的线性方法由一个叫Manacher的人在1975年发明的这个方法的最大贡献是在于将时间复杂度提升到了线性这是非常了不起的。对于回文串想必大家都不陌生就是正读反读都一样的字符串比如 bob, level, noon 等等那么如何在一个字符串中找出最长回文子串呢可以以每一个字符为中心向两边寻找回文子串在遍历完整个数组后就可以找到最长的回文子串。但是这个方法的时间复杂度为O(n*n)并不是很高效下面我们来看时间复杂度为O(n)的马拉车算法。 由于回文串的长度可奇可偶比如bob是奇数形式的回文noon就是偶数形式的回文马拉车算法的第一步是预处理做法是在每一个字符的左右都加上一个特殊字符比如加上#那么 bob    --    #b#o#b# noon    --    #n#o#o#n#  这样做的好处是不论原字符串是奇数还是偶数个处理之后得到的字符串的个数都是奇数个这样就不用分情况讨论了而可以一起搞定。接下来我们还需要和处理后的字符串t等长的数组p其中p[i]表示以t[i]字符为中心的回文子串的半径若p[i] 1则该回文子串就是t[i]本身那么我们来看一个简单的例子 # 1 # 2 # 2 # 1 # 2 # 2 #1 2 1 2 5 2 1 6 1 2 3 2 1 由于第一个和最后一个字符都是#号且也需要搜索回文为了防止越界我们还需要在首尾再加上非#号字符实际操作时我们只需给开头加上个非#号字符结尾不用加的原因是字符串的结尾标识为\0等于默认加过了。通过p数组我们就可以找到其最大值和其位置就能确定最长回文子串了那么下面我们就来看如何求p数组需要新增两个辅助变量mx和id其中id为最大回文子串中心的位置mx是回文串能延伸到的最右端的位置这个算法的最核心的一行如下   p[i] mx i ? min(p[2 * id - i], mx - i) : 1;   可以这么说这行要是理解了那么马拉车算法基本上就没啥问题了那么这一行代码拆开来看就是 如果mx i, 则 p[i] min(p[2 * id - i], mx - i) 否则 p[i] 1 当 mx - i P[j] 的时候以S[j]为中心的回文子串包含在以S[id]为中心的回文子串中由于 i 和 j 对称以S[i]为中心的回文子串必然包含在以S[id]为中心的回文子串中所以必有 P[i] P[j]见下图。     当 P[j] mx - i 的时候以S[j]为中心的回文子串不一定完全包含于以S[id]为中心的回文子串中但是基于对称性可知下图中两个绿框所包围的部分是相同的也就是说以S[i]为中心的回文子串其向右至少会扩张到mx的位置也就是说 P[i] mx - i。至于mx之后的部分是否对称就只能老老实实去匹配了。 对于 mx i 的情况无法对 P[i]做更多的假设只能P[i] 1然后再去匹配了。   参见如下实现代码   #include vector #include iostream #include stringusing namespace std;string Manacher(string s) {// Insert #string t $#;for (int i 0; i s.size(); i) {t s[i];t #;}// Process tvectorint p(t.size(), 0);int mx 0, id 0, resLen 0, resCenter 0;for (int i 1; i t.size(); i) {p[i] mx i ? min(p[2 * id - i], mx - i) : 1;while (t[i p[i]] t[i - p[i]]) p[i];if (mx i p[i]) {mx i p[i];id i;}if (resLen p[i]) {resLen p[i];resCenter i;}}return s.substr((resCenter - resLen) / 2, resLen - 1); }int main() {string s1 12212;cout Manacher(s1) endl;string s2 122122;cout Manacher(s2) endl;string s waabwswfd;cout Manacher(s) endl; } 转载于:https://www.cnblogs.com/yzm10/p/8407501.html
http://wiki.neutronadmin.com/news/178695/

相关文章:

  • dedecms5.7装饰公司网站模板潍坊 营销型网站建设
  • 怎样上传自己的网站wordpress页面里可不可以写php
  • 哈尔滨营销型网站建设公司青岛网页搜索排名提升
  • 湛江企业网站建设公司购物网站 建站服务
  • 广州网站建设互广广州开发网站设计
  • 公司商城网站开发费做什么科目做配资网站多少钱
  • 网站系统怎么建设在线制作logo模板
  • 如何做cad图纸模板下载网站wordpress栏目列表页
  • 便利的邯郸网站建设网站开发+协作平台
  • 肇庆市住房和城乡建设部网站网站建设地图素材
  • 微网站免费企业网站如何宣传
  • 和田地网站seo个性定制
  • 企业网站的设计策划怎么看网站是否备案成功
  • php 开源的企业网站潍坊昌乐县城乡建设局网站
  • 家具网站开发报告装修网站vr全景图怎么做
  • 英文网站名需要斜体吗动漫制作专业认知报告
  • 为什么公司的网站打不开网站如何申请微信支付接口
  • 网站导航提交入口大全西城做网站
  • 什么网站专做二手名表北京快速网站建设
  • 网站开发环境搭建网站建设高端培训
  • 拓者设计吧网站东莞建设网站的位置
  • seo网站设计招聘网站建设新零售
  • 山东济宁网站建设做视频广告在哪个网站能够赚钱
  • 网站注意事项国内重大新闻事件2024
  • soho的网站怎么做中轻成都设计院
  • 中医院网站素材新东阳建设集团网站
  • 河北省电力建设第二工程公司网站网站设计页面
  • 物流官方网站wordpress更换图片地址
  • 免费建立一个个人网站WordPress 聊天小工具
  • 网站做好怎么推广phpcms做的网站