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

如何做整人网站个人网站如何建立

如何做整人网站,个人网站如何建立,企业简介,网站制作难点2019独角兽企业重金招聘Python工程师标准 问题描述#xff1a; 给定一个字符串SA1A2...An#xff0c;要求找出其最长回文子串#xff08;Longest Palindromic Substring#xff09;。所谓回文子串就是S的某个子串Ai...Aj为回文。例如#xff0c;对字符串Sab… 2019独角兽企业重金招聘Python工程师标准 问题描述     给定一个字符串SA1A2...An要求找出其最长回文子串Longest Palindromic Substring。所谓回文子串就是S的某个子串Ai...Aj为回文。例如对字符串Sabcdcbeba它的回文子串有bcdcbcdcbeb满足题目要求的最长回文子串为bcdcb。 推理思路 1.由于回文可能由奇数个字符组成也可能由偶数个字符组成。对奇数回文的处理比较直观只需要以某个字符为中心依次向两边扩展即可。因此我们可以通过如下方式把对偶数回文的处理转换成对奇数回文的处理在字符边界添加特殊符号。例如对字符串aba预处理后变成#a#b#a#对字符串abba预处理后变成#a#b#b#a。可以看出不管是奇数回文还是偶数回文在与处理后都变成奇数回文。在找出与预处理后字符串的最长回文后只需要去除所有的#即为源字符串的最长回文。 2.对寻找字符串某类子串的问题最简单直观的想法就是穷举出所有子串一一进行判别。这里也不例外当然时间复杂度也很高为On^3。 3.对该问题我们可以进行一定程度的简化处理。既然回文是一种特殊的字符串我们可以以源字符串的每个字符为中心依次寻找出最长回文子串P0, P1,...,Pn。这些最长回文子串中的最长串Pi max(P1, P2,...,Pn)即为所求。请看源码 string find_lps_native(const string str) {int center  0, max_len  0;for(int i  1; i  str.length()-1; i){int j  1;//以str[i]为中心依次向两边扩展寻找最长回文Piwhile(ij  str.length()  i-j  0  str[ij]  str[i-j])j;--j;if(j  1  j  max_len){center  i;max_len  j;}}return str.substr(center-max_len, (max_len  1)  1); } 4.可以看出上面做法的复杂度为On^2。相比穷举字符串的做法已经降低了一个量级的复杂度。但是仔细想想上面的算法还有改进空间吗当然有而且改进后能够把复杂度降低到On这就是大名鼎鼎的 Manacher’s Algorithm。请看下文分析     举例说明对字符串Sabcdcba而言最长回文子串是以d为中心半径为3的子串。当我们采用上面的做法分别求出以S[1]a, S[2]b, S[3]c, S[4]d为中心的最长回文子串后对S[5]c,S[6]b...还需要一一进行扩展求吗答案是NO。因为我们已经找到以d为中心半径为3的回文了S[5]与S[3]S[6]与S[2]...以S[4]为对称中心。因此在以S[5],S[6]为中心扩展找回文串时可以利用已经找到的S[3],S[2]的相关信息直接进行一定步长的偏移这样就减少了比较的次数回想一下KMP中next数组的思想。优化的思想找到了我们先看代码 string find_lps_advance(const string str) {//find radius of all charactersvectorint p(str.length(), 0);int idx  1, max  0;for(int i  1; i  str.length()-1; i){if(max  i){p[i]  p[(idx  1) - i]  (max - i) ? p[(idx  1) - i]:(max - i);}while(str[ip[i]1]  str[i-p[i]-1])p[i]  1;if(i  p[i]  max){idx  i;max  ip[i];}}// find the character which has max radiusint center  0, radius  0;for(int i  0; i  p.size(); i){if(p[i]  radius){center  i;radius  p[i];}}return str.substr(center-radius, (radius  1)  1); }     这里进行简单的解释上述代码中有三个主要变量它们代表的意义分别是      p:以S[i]为中心的最长回文串的半径为p[i]。      idx:已经找出的能够右延伸最远距离的回文子串的起始位置。      max:已经找出的能够右延伸最远距离的回文子串的结束位置。      算法的主要思想是先找出所有的p[i]最大的p[i]即为所求。在求p[j] ji时利用已经求出的p[i]减少比较次数。      代码中比较关键的一句是  p[i]  p[(idx  1) - i]  (max - i) ? p[(idx  1) - i]:(max - i);     在求p[i]时如果maxi则表明已经求出的最长回文中包含了p[i]那么与p[i]关于idx对称的p[ (idx 1) - i]的最长回文子串可以提供一定的信息。看了两幅图大概就明白什么意思了     求二者的最小值是因为当前能够获取的信息都来自max的左侧需要进一步比较求出以S[i]为中心的最长回文串。 5.除了上述的几种做法外还可以利用动态规划以及后缀树来进行求解。下次进行介绍。     结束行文之前补充一句对于字符串类的问题建议多画一画寻找其中的规律。   参考文献1.http://www.akalin.cx/longest-palindrome-linear-time   转载于:https://my.oschina.net/pathenon/blog/63575
http://www.yutouwan.com/news/347985/

相关文章:

  • 做的网站需要什么技术支持旅游公司网站开发与实现
  • 开发网站 需求怎么做页面设计
  • 一个网站可以有几个关键词平面设计接单app
  • 网站上图片的链接怎么做阜阳微网站建设多少钱
  • 网站建设费用核算我有小创意设计校服图片
  • 东莞 网站 建设网页设计规范怎么写
  • 网站建设书籍资料广东省住房和城乡建设局官网
  • 北京网站优化指导wordpress在线查询系统
  • 开展网站建设服务网站内页优化
  • 有模板了怎么建设网站网站tkd优化
  • 途牛旅游线路网站建设分析做海报的软件app免费
  • 网站备案要多少天广东建设信息网电脑版
  • 百度公司做网站优化多少钱wordpress支持视频播放器插件
  • 江西邮电建设工程有限公司网站网站的手机站页面重复
  • 赤峰网站建设哪家好小程序商店制作教程
  • 网站建设 搜狐网站建设问一问公司
  • 镜像网站如何做排名wordpress中文用户名
  • 泰州 住房和城乡建设厅网站自助建站
  • 自己做的视频网站上传电影西安网站建设制作专业公司
  • 做小说网站做国外域名还是国内的好鄂州手机网站设计
  • 辽宁网站建设招标网站自己推广怎么做
  • 网站主办者什么意思C 网站开发招聘
  • ac86u做网站服务器人力资源公司起名大全册子
  • 网站返回500错误页面wordpress 底部插件
  • 网站网页模板网站建设与维护试题及答案
  • 食品网站首页模板欣赏上海全国关键词排名优化
  • 鄂州商城网站建设朗域装饰公司怎么样
  • 杭州建设工程信息网站做网站资源
  • 做生鲜食品最好的网站贵州省遵义市建设局网站
  • 网站开发工资山东新的网站建设技术方案