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

wordpress手机站如何做南山网站 建设深圳信科

wordpress手机站如何做,南山网站 建设深圳信科,郑州网站排名外包,上海新闻最新消息Longest Palindromic Substring Part II 给定一个字符串 S, 找出字符串S中的最长回文子字符串. 注意: 这是关于:Longest Palindromic Substring.的第二篇文章了.在这里,我们讨论一种可以再线性时间内找到字符串中最长回文子字符串的一种算法(Manacher’s algorithm).请先阅读第… Longest Palindromic Substring Part II 给定一个字符串 S, 找出字符串S中的最长回文子字符串. 注意: 这是关于:Longest Palindromic Substring.的第二篇文章了.在这里,我们讨论一种可以再线性时间内找到字符串中最长回文子字符串的一种算法(Manacher’s algorithm).请先阅读第一篇文章(Part I )作为背景知识. 在之前的的文章里面我们已经讨论了四种不同的方法,那些方法中最简单的方法的时间复杂度为O(N2),空间复杂度为常数.在这里,我们将讨论一种时间复杂度为O(N)空间复杂度也为O(N)的一种算法,名字叫做 Manacher’s algorithm. 考虑一下如何提高之前提到的那种时间复杂度为O(N2)的方法,先考虑一下最坏情况.最坏情况便是输入是一个全是重复字符的字符串.比如 aaaaaaa 和cavcavcvcavcav.实际上,我们可以利用回文字符串的对称性来避免一些不必要的计算. 一个O(N)的解法(Manacher’s Algorithm): 首先,我们通过在输入的字符串S的每个字符之间插入字符#将字符串S转化成字符串T.为什么这么做呢?一会儿你就明白了. 例如: S “abaaba”, T “#a#b#a#a#b#a#”. 为了找到最长的文字子序列,我们需要从Ti 向两边扩展,找到一个Ti-d … Tid 是一个回文序列.你马上就会明白其实d就是以Ti 为中点的回文序列的长度. We store intermediate result in an array P, where P[ i ] equals to the length of the palindrome centers at Ti. The longest palindromic substring would then be the maximum element in P. 我们将得到的结果保存在一个数组P中,其中P[i]的值就是以Ti 为中点的回文序列的长度.那么最长的回文子序列就是数组P中的最大元素了. 基于上边的例子,我们可以得到对应的P: T # a # b # a # a # b # a # P 0 1 0 3 0 1 6 1 0 3 0 1 0 观察数组P,我们会发现“abaaba”的最长回文子序列长度是P6  6. 不知道你是否注意到,通过在字符串中插入字符#,我们可以很容易的处理奇数和偶数的回文序列. 现在,想象一下你在会回文序列“abaaba”的中间画了一条垂线.你是否注意到P中元素的值是关于这条线是对称的.这不是个例.对于另外一个回文aba,依然有这样的特点.通过这个特性,我们可以简化求P[i]中元素值的过程. 让我们再看一个稍微复杂一点儿的例子吧.S “babcbabcbaccba” 上面的T字符串是由S转化而来.假定你已经求得了P中一部分值,(也就是P中?之前的值你已经求得)实线代表“abcbabcba”的中心.两条虚线分别代表左(L)右(R)边界.你现在处在i的位置,关于C与i对称的是 i’.那么你将如何计算P[i]的值呢? 这里我们假定你已经计算到了i 13的位置,我们现在需要计算P[13](对应于图中?的位置).我们首先看一下他的对称点 i’ . i’   9; 图中绿线表示的是i 和 i’所覆盖的区域.i关于C的对称点 i’,P[ i’ ] P[ 9 ] 1.这很明显,P[i]肯定等于1.因为关于C他们是对称的. 正如你在上面所看见的, 由于回文序列关于中点对称的性质,我们可以很容易的得知P[ i ] P[ i’ ] 1.事实上,接下来的三个元素的值也可以同样得到( P[ 12 ] P[ 10 ] 0, P[ 13 ] P[ 9 ] 1, P[ 14 ] P[ 8 ] 0) 现在我们计算到了i 15的位置,I的对应点 i’ 7,P[15]是否也等于7呢? 现在我们计算到了i 15的位置,P[i]的值到底是多少呢?如果我们继续使用对称来做,那么它的值还是等于P[7] 7.但是那是错的.如果我们以 T15,为中心向两边扩展,会形成回文序列“a#b#c#b#a”,但是它的长度却不是7而是小于7.为什么呢? Colored lines are overlaid around the center at index i and i’. Solid green lines show the region that must match for both sides due to symmetric property around C. Solid red lines show the region that might not match for both sides. Dotted green lines show the region that crosses over the center.分别以 i 和i’为中点时,它们覆盖区域是重叠的.绿色实线表示关于C对称的两部分所覆盖的区域.红色实线表示的是不对称的区域.绿色虚线表示跨越C的区域. 通过上图可以很清楚地看出两条绿色实线对应的的区域是完全匹配的.跨越中点的区域(绿色虚线对应区域)也是对称的.仔细看,P[ i ‘ ]是7,它扩展的区域已经超过了回文序列的左边界(L,红线表示).而那一部分已经不属于对称的回文序列中了.我们可以确定的是 P[ i ] ≥ 5.为了找到 P[ i ] 的实际值,我们需要一个一个字符的匹配扩展到右边界之外(R,红线表示).在这个示例中,最后结果是 P[ i ] ≥ 5. 让我们总结一下算法的主要部分: if P[ i’ ] ≤ R – i, then P[ i ] ← P[ i’ ] else P[ i ] ≥ P[ i’ ]. (Which we have to expand past the right edge (R) to find P[ i ]. 是不是很简单呢?如果你已经掌握了它,那么已经掌握了这个算法的精华,同时也是最难得部分. 最后要做的是就是我们应该在什么时候将C和R一起向右移动呢,这是非常简单的: If the palindrome centered at i does expand past R, we update C to i, (the center of this new palindrome), and extend R to the new palindrome’s right edge. 对于每一步,有两种可能.如果P[ i ] ≤ R – i, 我们将P[ i ] 赋值为 P[ i’ ].此步骤只需要花费1布.否则我们尝试着将i作为中点,扩展这个新回文序列,并且是以右边界(R)所在位置为起点.这个步骤最多花费N布,定位和测试每个中点需要花费N布,因此这个算法可以确保在2*N布之内给出结果. // Transform S into T. // For example, S abba, T ^#a#b#b#a#$. // ^ and $ signs are sentinels appended to each end to avoid bounds checking stringpreProcess(strings){intns.length();if(n0)return^$;stringret^;for(inti0;in;i)ret#s.substr(i,1);ret#$;returnret; }stringlongestPalindrome(strings){stringTpreProcess(s);intnT.length();int*Pnewint[n];intC0,R0;for(inti1;in-1;i){inti_mirror2*C-i;// equals to i C - (i-C)P[i](Ri)?min(R-i,P[i_mirror]):0;// Attempt to expand palindrome centered at iwhile(T[i1P[i]]T[i-1-P[i]])P[i];// If palindrome centered at i expand past R,// adjust center based on expanded palindrome.if(iP[i]R){Ci;RiP[i];}}// Find the maximum element in P.intmaxLen0;intcenterIndex0;for(inti1;in-1;i){if(P[i]maxLen){maxLenP[i];centerIndexi;}}delete[]P;returns.substr((centerIndex-1-maxLen)/2,maxLen); }   } 原文地址: Longest Palindromic Substring Part II
http://www.huolong8.cn/news/227132/

相关文章:

  • 长沙关键词优化方法网站seo哪家好
  • 个人网站设计与制作源代码qq推广功能在哪开
  • 2024房地产趋势分析深圳网站优化项目
  • 保定模板做网站网站建设平台哪家好
  • 微商做图王官方网站辽宁建设工程信息网怎么获取招标文件
  • 淘宝页面制作众志seo
  • 做外贸网站代理商产品网络营销分析
  • 免费网站建设塔山双喜网站建设及验收标准
  • 北京怎样做网站推广wordpress 固定链接 分类
  • 怎么在百度上免费做广告上海专业的seo推广咨询电话
  • 网站建设需要考虑哪些因素企业管理系统说明
  • 岫岩洋河网站建设网站页面设计与制作实践
  • 甘肃省城乡建设厅网站首页优设网视频剪辑
  • 苏州网络科技公司建网站旅游景区规划设计公司
  • 标志空间 网站域名申请免费注册
  • 东莞微信网站建设怎样网站建设与维护教案
  • 企业如何建自己的网站网站开发需要哪些知识和工具
  • 哈尔滨住房城乡建设局网站企业为什么校招
  • 整套vi设计都包含哪些南宁网站搜索引擎优化
  • 凤岗东莞微信网站建设温州专业营销网站建设
  • 石家庄招聘哪个网站做的好哈尔滨建设网站公司
  • 长沙给中小企业做网站的公司手机如何登陆Wordpress
  • 2013网站怎么备案WordPress付费会员主题
  • 优化一个网站多少钱wordpress 微信商城
  • 做网站的思路怎么写网站制作公司多少钱
  • 闵行网站搭建哪里有什么叫 营销型网站
  • 哪个网站可以做设计比赛网站开发需要多少钱价格
  • 做网站是用什么技术的鞍山58招聘
  • 企业如何在网站上做宣传深圳在线制作网站
  • 班级网站设计兰州响应式网站建设