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

做个兼职网站设计济南头条新闻热点

做个兼职网站设计,济南头条新闻热点,成品模板网站,怎么在网站上做签到题1: 指路:72. 编辑距离 - 力扣(LeetCode) 思路与代码: 关于dp数组的定义,我们定义一个二维数组dp[i][j],其含义为以i-1为结尾的字符串word1和以j-1为结尾的字符串word2,最近编辑…

题1:

指路:72. 编辑距离 - 力扣(LeetCode)
思路与代码:

关于dp数组的定义,我们定义一个二维数组dp[i][j],其含义为以i-1为结尾的字符串word1和以j-1为结尾的字符串word2,最近编辑距离为dp[i][j]。关于递推公式,如果数组1和数组2中内容相等,此时无须做任何操作,就等于下标为i-1和j-1的编辑距离,也就是dp[i][j]=dp[i-1][j-1]。当数组1和数组2中内容不同时,此时有三种操作,增、删、改。注意:当word1和word2中内容不相同时,不一定是单单改变其中一个变成另一个,也可以选择两者同时改变向对方靠近。删除word1的一个字符是dp[i-1][j]+1,替换字符为dp[i-1][j-1]+1,删除word2中字符(相对于word1为增加字符)即为dp[i][j-1]+1,取最小值即为 dp[i][j] = min({dp[i - 1][j], dp[i][j - 1], dp[i - 1][j - 1]}) + 1。那么在初始化环节,dp[i][0]的含义为以下标i-1为结尾的字符串word1和空字符串word2的最近编辑距离为dp[i][0],得到dp[i][0]=i,同理dp[0][j]=j。对于遍历顺序,很显然是从上到下从左到右,最后打印即可。代码如下:

class Solution {
public:int minDistance(string word1, string word2) {vector<vector<int>> dp(word1.size() + 1, vector<int>(word2.size() + 1, 0));for (int i = 0; i <= word1.size(); i++) dp[i][0] = i;for (int j = 0; j <= word2.size(); j++) dp[0][j] = j;for (int i = 1; i <= word1.size(); i++) {for (int j = 1; j <= word2.size(); j++) {if (word1[i - 1] == word2[j - 1]) {dp[i][j] = dp[i - 1][j - 1];}else {dp[i][j] = min({dp[i - 1][j], dp[i][j - 1], dp[i - 1][j - 1]}) + 1;}}}return dp[word1.size()][word2.size()];}
};

题2:

指路:647. 回文子串 - 力扣(LeetCode)
思路与代码:

定义一个数组dp[i][j],其含义为在i和j的范围内如果i和j对应的值相等且子串如果是回文串那么这个以i和j为范围的字符串就是回文子串,其中分为三种情况,首先,i和j相等,那么显然这个字符串就是只有一个字符的字符串,肯定是一个回文串,遇到符合条件的回文串时计数器加1;其次如果i和j相差为1,也就是i和j相邻,此时如果s[i]等于s[j]那么这也是一个回文字符串;最后一种情况为i和j相差大于1,也就是它们之中有一个子串,此时将i定义为数组始位置j定义为尾位置,在判断s[i]等于s[j]后,再进一步将i和j各往前移位一位,也就是i+1和j-1的位置,如果也成立继续判断得到回文子串的判断。注意,我们在i和j位置的数值也要判断的是i+1和j-1的位置的数值,那么在二维数组中对应的位置就是[i,j]的左下方位置,换句话来说,由左下方向右上方判断,也就是从左到右从下往上循环。最后输出即可。

class Solution {
public:int countSubstrings(string s) {if (s.size() <= 1) return s.size();vector<vector<bool>> dp(s.size(), vector<bool>(s.size(), false));int result = 0;for (int i = s.size() - 1; i >= 0; i--) {for (int j = i; j < s.size(); j++) {if (s[i] == s[j]) {if (j - i <= 1) {result++;dp[i][j] = true;}else if (dp[i + 1][j - 1]) {result++;dp[i][j] = true;}}}}return result;}
};

题3:

指路:516. 最长回文子序列 - 力扣(LeetCode)
思路与代码:

本题与上题的区别在于子串和子序列的区别,子串须连续,子序列则不需要。定义一个数组dp[i][j],其含义为字符串s[i, j]范围内最长的回文子序列的长度为d[i][j]。递推公式中,依旧是回文,判断s[i]与s[j]的相等状况就好。如果二者相同那么dp[i][j]=dp[i+1][j-1]+2(加2是因为首尾元素也是回文子序列的一部分),如果二者不相同则说明首尾元素不能同时加入子序列的队伍,那么尝试首尾元素分开添加,取较大值即可,即dp[i][j]=max(dp[i+1][j], dp[i][j-1])。这里的遍历顺序如上题所言,从下往上从左往右,最后打印即可。代码如下:

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

动态规划的小总结:

呼~动态规划终于告一段落了,感觉比起子序列问题我更喜欢股票类问题。但是无外乎就五步,定义dp数组及其定义,推断递推公式,初始化dp数组,确定遍历顺序最后打印dp数组。好累,先这样。

http://www.hkea.cn/news/393472/

相关文章:

  • 数据服务网站策划方案关键词快速优化排名软件
  • 响应式网站缺点学大教育培训机构电话
  • 江苏天德建设工程有限公司网站一个平台怎么推广
  • 石家庄做网络推广的网站推广平台收费标准
  • 贵阳天柱网站建设招聘域名注册平台有哪些
  • 网站建设电话营销百度问一问官网
  • 网站优化建设河南怎么关闭seo综合查询
  • 自贡做响应式网站开发公司google搜索引擎入口google
  • 东莞哪种网站推广好微信朋友圈推广文案
  • 现在学做网站赚钱吗东莞市优速网络科技有限公司
  • 宁津做网站公司宣传推广图片
  • 陕西的建设厅官方网站数据分析报告
  • 企业网站建设的定位互联网
  • 注册域名之后如何做网站优化清理大师
  • wordpress+在线播放推广seo网站
  • 丽水网站建设明恩玉杰网站开发框架
  • 如何设计网站中的上传功能搜索引擎技术基础
  • 余江区建设局网站百度搜索引擎优化的方法
  • 做网站用c 还是java万网域名注册教程
  • 青岛做网站那家好专业的网站优化公司排名
  • 网站如何做淘宝推广seo服务 收费
  • 学完js了可以做哪些网站营业推广的形式包括
  • 网站会员系统怎么做模版seo是指什么职位
  • 上海集团网站制作新闻 近期大事件
  • 商城网站验收标准seo关键词排名优化怎样收费
  • 睢宁做网站公司珠海百度关键字优化
  • 临安市住房和建设局网站伊春seo
  • 天津百度做网站多少钱游戏代理平台哪个好
  • b2b模式的网站google网站
  • 做优化网站哪个公司好十大营销策略