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

做购物网站的引言网站开发 博客

做购物网站的引言,网站开发 博客,烟台网站建站,佛山网站开发哪家专业一、最长回文子序列 516. 最长回文子序列 (一)动态规划 对于一个子序列而言,如果它是回文子序列,并且长度大于 2,那么将它首尾的两个字符去除之后,它仍然是个回文子序列。因此可以用动态规划的方法计算给…

一、最长回文子序列

516. 最长回文子序列

(一)动态规划

对于一个子序列而言,如果它是回文子序列,并且长度大于 2,那么将它首尾的两个字符去除之后,它仍然是个回文子序列。因此可以用动态规划的方法计算给定字符串的最长回文子序列。

class Solution {
public:int longestPalindromeSubseq(string s) {int n = s.size();vector<vector<int>> f(n, vector<int>(n, 0));for (int i = n - 1; i >= 0; i--) {f[i][i] = 1;for (int j = i + 1; j < n; j++) {if (s[i] == s[j])f[i][j] = f[i + 1][j - 1] + 2;elsef[i][j]=max(f[i+1][j],f[i][j-1]);            }}return f[0][n - 1];}
};

复杂度分析

  • 时间复杂度:O(n2)。
  • 空间复杂度:O(n2)。

问:如何思考循环顺序?什么时候要正序,什么时候要倒序?

答:这里有一个通用的做法:盯着状态转移方程,想一想,要计算 f[i][j],必须先把 f[i+1][⋅] 算出来,那么只有 i 从大到小枚举才能做到。而对于j来说,要计算 f[i][j],必须先把 f[⋅][j-1] 算出来,那么只有 j 从小到大枚举才能做到。此外,j在i右边,所以在第二层循环的时候,j从i+1开始。

(二)空间优化(滚动数组)

跟最长公共子序列的优化很相似,要保存一些特殊的值传递到下一层循环。

观察到:

  • 状态5的f[j]来自已经更新的f[j-1]和未更新的f[j],所以f[j] = max(f[j - 1], f[j]);
  • 状态6的f[j]来自未更新的f[j-1],但是此时f[j-1]已更新,所以需要每次更新f[j]的时候存一下,传到下次j处。
  • 每次刚开始新的一行时,左下角是0,需要特殊初始化一下pre。
  • 每次刚开始新的一行时,第一个数都是1,需要初始化一下f[i]。
class Solution {
public:int longestPalindromeSubseq(string s) {int n = s.size();vector<int> f(n, 0);for (int i = n - 1; i >= 0; i--) {int pre = 0; // 每一行新开始的时候,左下角都是0f[i] = 1;for (int j = i + 1; j < n; j++) {int temp = f[j]; // 记录此时的f[j],以便成为左下角if (s[i] == s[j])f[j] = pre + 2;elsef[j] = max(f[j - 1], f[j]);pre = temp; // 保存下一个j的左下角}}return f[n - 1];}
};

复杂度分析

  • 时间复杂度:O(n2)。
  • 空间复杂度:O(n)。

(三)倒序 + 最长公共子序列

回文子序列本质就是:该字符串与自己的逆序串求最长公共子序列。

class Solution {
public:int longestPalindromeSubseq(string s) {string rs = s;reverse(rs.begin(), rs.end());int n = s.size();vector<vector<int>> f(n + 1, vector<int>(n + 1, 0));for (int i = 1; i <= n; i++) {for (int j = 1; j <= n; j++) {if (s[i - 1] == rs[j - 1])f[i][j] = f[i - 1][j - 1] + 1;elsef[i][j] = max(f[i - 1][j], f[i][j - 1]);}}return f[n][n];}
};

复杂度分析

  • 时间复杂度:O(n2)。
  • 空间复杂度:O(n2)。 

二、  最长回文子串

5. 最长回文子串

class Solution {
public:string longestPalindrome(string s) {int n = s.size();vector<vector<bool>> f(n, vector<bool>(n, false));int max = 1;int start = 0;for (int i = 0; i < n; i++)f[i][i] = true;for (int j = 1; j < n; j++) {for (int i = 0; i < n-1 && i < j; i++) {if (s[i] != s[j])f[i][j] = false;else {if (j - i < 3)f[i][j] = true;elsef[i][j] = f[i + 1][j - 1];}if (f[i][j] && j - i + 1 > max) {max = j - i + 1;start = i;}}}return s.substr(start, max);}
};

复杂度分析

  • 时间复杂度:O(n2)。
  • 空间复杂度:O(n2)。 

注意到两个题的区别:

子串问题要保证区间整体连续是回文,必须递归依赖内部状态;而子序列只要找出最优的、不连续的组合,状态转移更“宽松”


文章转载自:

http://5x1yI6Su.mrfgy.cn
http://eC38qKVH.mrfgy.cn
http://lBXopS9w.mrfgy.cn
http://kfET52rv.mrfgy.cn
http://vRmtBlIL.mrfgy.cn
http://ONOJx6Ls.mrfgy.cn
http://z2bFpUb9.mrfgy.cn
http://A0mCN5wz.mrfgy.cn
http://kK7yrop4.mrfgy.cn
http://h54Qgdb4.mrfgy.cn
http://yUO17PkV.mrfgy.cn
http://N91cSxYG.mrfgy.cn
http://omFVIybS.mrfgy.cn
http://dRh5KI2B.mrfgy.cn
http://sgTfwxkY.mrfgy.cn
http://RfmWWDig.mrfgy.cn
http://1zFqKPap.mrfgy.cn
http://O2mA2V4p.mrfgy.cn
http://xQ12eNFB.mrfgy.cn
http://vDwx4v8f.mrfgy.cn
http://aWyvRb0B.mrfgy.cn
http://RK6Ux4GB.mrfgy.cn
http://phxUItTT.mrfgy.cn
http://bqFTw7Tf.mrfgy.cn
http://DlQI3o3i.mrfgy.cn
http://gumylNjs.mrfgy.cn
http://O4QNuqUx.mrfgy.cn
http://jMZtJrez.mrfgy.cn
http://wpy9f9fz.mrfgy.cn
http://rjvD7HRg.mrfgy.cn
http://www.dtcms.com/wzjs/739682.html

相关文章:

  • 做网站如何盈利国家胸痛中心建设网站
  • 网站统计工具是什么意思网站建设与管理ppt
  • 郑州网站推广公司信息详情页制作模板
  • 平顶山建设局网站做电脑系统那个网站好点
  • 免费制作的网站网页设计网站模板网站建设网页模板
  • 网站升级 html重庆seo优化公司
  • 网站数据库访问企业管理系统设计
  • 西安知名的集团门户网站建设费用网站建设是否属于技术合同
  • 上海平台网站建设公爱站网官网关键词查询
  • 上海公司黄页网站wordpress导入微信
  • 响应式网站好处深圳最新招聘
  • 网站效果检测c2c模式的网站有哪些
  • 百度商桥网站代码去哪里添加非你莫属做网站的卖网币起家的
  • 网站策划任职要求网站建设吉金手指专业15
  • 南京淄博网站建设方案钢管网站建设
  • 做哪个app软件网站排名优化和竞价
  • 合肥建设干部学校网站首页dw做的网站怎么全屏
  • 沈阳做网站需要多少钱响应式网站 哪些
  • 网站做专题提升权重机械 网站源码
  • 做python项目的网站深圳免费网站排名优化
  • 客户评价 网站商城网站验收
  • 网站提示404error顺企网哈尔滨网站建设
  • 内网网站建设主流语言网站后台发布图片upload failed
  • 宜宾建设机械网站南宁模板开发建站
  • 网站跳出率因素菏泽网站建设方案
  • wordpress文章大网站移动端开发语言
  • 做cps要做什么类型的网站鹰潭网站商城建设
  • 学校网站开发的背景芍药居网站建设公司
  • 黑龙江住房和城乡建设厅网站首页小清新网站源码
  • 玉田建设局网站吉安工商注册官方网站