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

网站专门做冻品的免费咨询范围

网站专门做冻品的,免费咨询范围,广州市网站制作,芭嘞seo在一个字符串中要到最长的回文子串#xff0c;有如下方案#xff0c;代码在最后。 最长回文子串的相关博文 1、暴力法 最容易想到的就是暴力破解#xff0c;求出每一个子串#xff0c;之后判断是不是回文#xff0c;找到最长的那个。 求每一个子串时间复杂度O(N^2)#x… 在一个字符串中要到最长的回文子串有如下方案代码在最后。 最长回文子串的相关博文 1、暴力法 最容易想到的就是暴力破解求出每一个子串之后判断是不是回文找到最长的那个。 求每一个子串时间复杂度O(N^2)判断子串是不是回文O(N)两者是相乘关系所以时间复杂度为O(N^3)。 2、中心扩展 中心扩展就是把给定的字符串的每一个字母当做中心向两边扩展这样来找最长的子回文串。算法复杂度为O(N^2)。 但是要考虑两种情况 1长度为奇数。 2长度为偶数。 3、动态规划 回文字符串的子串也是回文因此用dpm[i,j]表示以i开始以j结束的子串是回文字符串那么P[i1,j-1]也是回文字符串。这样最长回文子串就能分解成一系列子问题了。这样需要额外的空间ON^2)算法复杂度也是O(N^2)。 首先定义状态方程和转移方程 dpm[i,j]0表示子串[i,j]不是回文串。dpm[i,j]1表示子串[i,j]是回文串。 4、Manacher法 Manacher法只能解决例如aba这样长度为奇数的回文串对于abba这样的不能解决于是就在里面添加特殊字符。一般添加了“#”使abba变为a#b#b#a。这个算法就是利用已有回文串的对称性来计算的具体算法复杂度为O(N)。 Manacher详细介绍 下面是几种方法的代码 inline bool isPalindrome(const string s,int n1, int n2) {for (int k1(n1), k2(n2 - 1); k1 k2; k1, --k2) if (s[k1] ! s[k2]) return false;return true; }string findLongestPalindromeBrute(string s) {int sl(s.length()), mlen(1), start(0);for (int k1(0); k1 sl; k1) {for (int k2(k1 mlen 1); k2 sl; k2) {if (isPalindrome(s, k1, k2)) start k1, mlen k2 - k1;}}return s.substr(start, mlen); }string findLongestPalindromeDP(string s) {int sl(s.length()), mlen(1), start(0);vectorvectorbool dpm(sl, vectorbool(sl, false));for (int k1(0); k1 sl; k1) dpm[k1][k1] true;for (int k1(0); k1 sl - 1; k1) {if (s[k1] s[k1 1]) {dpm[k1][k1 1] true;if (!start) start k1, mlen 2;}}for (int kn(3); kn sl; kn) {for (int k1(0); k1 sl - kn; k1) {if (dpm[k1 1][k1 kn - 2] s[k1] s[k1 kn - 1]) {dpm[k1][k1 kn - 1] true;mlen kn;start k1;}}}return s.substr(start, mlen); }string findLongestPalindromeCE(string s) {int sl(s.length()), mlen(1), start(0);for (int k1(1), kd(1); k1 sl; k1) {for (kd 1; k1 - kd 0 k1 kd sl s[k1 - kd] s[k1 kd];kd);if (mlen 2 * kd - 1) {mlen 2 * kd - 1;start k1 - kd 1;}}for (int k1(1), kd; k1 sl; k1) {for (kd 0; k1 - kd 0 k1 kd 1 sl s[k1 - kd] s[k1 kd 1]; kd);if (mlen 2 * kd) {mlen 2 * kd;start k1 - kd 1;}}return s.substr(start, mlen); }string findLongestPalindromeManacher(string s) {string s1($#);for (auto ch : s) s1 ch, s1 #; // Insert #vectorint pv(s1.size(), 0);int index(0), mlen(1);for (int k1(2),mid(1),mxr(0); k1 s1.size(); k1) {pv[k1] k1 mxr ? min(pv[mid mid - k1], mxr - k1) : 1;while (s1[k1 pv[k1]] s1[k1 - pv[k1]]) pv[k1];if (mxr k1 pv[k1]) {mxr k1 pv[k1];mid k1;}if (mlen pv[k1]) {mlen pv[k1];index k1;}}return s.substr((index - mlen) / 2, mlen - 1); } string findLongestPalindromeManacher2(string s) {string s1(#);for (auto ch : s) s1 ch, s1 #; // Insert #int sl1(s1.length()), index(0), mlen(1);vectorint pv(sl1, 0);for (int k1(1), kd(1), kt; k1 sl1;) {while (0 k1 - kd k1 kd sl1 s1[k1 - kd] s1[k1 kd]) kd;pv[k1] kd - 1;for (kt 1; kt pv[k1] pv[k1 - kt] pv[k1] - kt; kt) pv[k1 kt] pv[k1 - kt];k1 kt;kd kd - kt;}for (int k1(1); k1 sl1; k1) {if (mlen pv[k1]) {mlen pv[k1];index k1;}}return s.substr((index - mlen) / 2, mlen); } 其中 函数isPalindrome 检查一个子串是否为回文子串 findLongestPalindromeBrute 为暴力方案 findLongestPalindromeDP 为动态规划 findLongestPalindromeCE 为中心扩展 findLongestPalindromeManacher 和 findLongestPalindromeManacher2 为 Manacher方案。 转载于:https://www.cnblogs.com/lmjy/p/6858220.html
http://www.yutouwan.com/news/38733/

相关文章:

  • 东营seo网站推广费用优秀的手机网站设计
  • 帝国怎么做中英文网站用c 做毕业设计的音乐网站
  • 傻瓜式网站开发软件公司网站内容更新怎么做
  • 江宁网站建设方案百度怎么搜索网址打开网页
  • 如何注册网站域名备案wordpress收费博客
  • 网站后台管理是做一些什么最新的网站建设软件有哪些
  • 简单企业网站源码 asp.net 公司介绍 产品展示自己做的网站收录怎么提升
  • 外贸网站建设商家做移动网站排名软件
  • p2p网站建设时间网站建设资料百度云
  • 网站手机版开发做企业网站怎么收费的
  • 国内哪家公司做网站最好网站设计软件下载
  • pageadmin做的网站的域名必须要备案吗vultr建站wordpress
  • 网站开发 开票seo优化查询
  • 网站建设策划书结束语徐州人才网最新招聘
  • 免费的创建个人网站备案网站公共查询系统
  • 做淘宝网站目的前端需要学wordpress
  • 友汇网站建设管理后台申请关闭网站
  • 长沙做网站kaodezhu微信公众号推广
  • 郑州一站式网站搭建市场营销研究生好考吗
  • 房地产网站建设与优化分析模板网站可以做备案吗
  • 软件产品设计方案苏州做网站优化公司哪家好
  • 骏驰网站开发广州制作软件
  • 中国建设银行网站简介多梦wordpress
  • 教育网站前置审批系统设计公司怎么找客户
  • 南京网站定制公司企业所得税的计算公式
  • 大连城乡建设局网站手机兼职赚钱正规平台怎么找
  • 广州哪里可以做网站公众号开发者密钥重置影响
  • 山东网站建站系统平台网站编辑是个长期做的工作吗
  • 单位做网站费用怎么记账上海哪里做网站比较好
  • 三门峡河南网站建设免费咨询问题的网站