| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 数据结构与算法 -> 算法系列——动态规划10 -> 正文阅读 |
|
[数据结构与算法]算法系列——动态规划10 |
class?Solution?{ public: /* ????dp[i][j]:以string[i-1]结尾的字符串和以string[j-1]结尾的字符串相等字符的个数 ????????""???a???h???b???g???d???c ????""??0????0???0???0???0???0???0? ????a???0????1???1???1???1???1???1 ????b???0????0???1???2???2???2???2???????? ????c???0????0???0???0???0???0???3 ????如果当前字符串(string?s)里的字符与目标字符串(string?t)里的字符对应相等: ????if(s[i-1]==t[j-1])?dp[i][j]=dp[i-1][j-1]+1; ????如果字符对应不相等,就应该去看目标字符串里之前的字符与当前字符串里的字符相不相等 ????else?dp[i][j]=dp[i-1][j]; ???????????????? */ ????bool?isSubsequence(string?s,?string?t)?{ ????????int?m=s.size(); ????????int?n=t.size(); ????????vector<vector<int>>dp(m+1,vector<int>(n+1,0)); ????????for(int?i=1;i<=m;i++){ ????????????for(int?j=1;j<=n;j++){ ????????????????if(s[i-1]==t[j-1]){ ????????????????????dp[i][j]=dp[i-1][j-1]+1; ????????????????} ????????????????else{ ????????????????????dp[i][j]=dp[i][j-1]; ????????????????} ????????????} ????????} ????????//如果dp[m][n]等于当前字符串长度,就是目标字符串的子序列 ????????if(dp[m][n]==m)?return?true; ????????else?return?false; ????} }; class?Solution?{ public: ????int?minDistance(string?word1,?string?word2)?{ ????????/*删除到最后的结果就是最长公共子序列!!! ????????dp[i][j]:以word[i-1]结尾的字符串与以word[j-1]结尾的字符串的lsc的长度 ???????? ????????????""??s???e???a ????????""??0???0???0???0 ????????e???0???0???1???1??? ????????a???0???0???1???2 ????????t???0???0???1???2 ????????题目要求的是最小删除次数:只需要拿每个字符串长度都减去lsc的长度得到删除的总次数最小值 ????????res=m-dp[m][n]+n-dp[m][n]; ????????*/ ????????int?m=word1.size(); ????????int?n=word2.size(); ????????vector<vector<int>>dp(m+1,vector<int>(n+1,0)); ????????for(int?i=1;i<=m;i++){ ????????????for(int?j=1;j<=n;j++){ ????????????????if(word1[i-1]==word2[j-1])?dp[i][j]=dp[i-1][j-1]+1; ????????????????else?dp[i][j]=max(dp[i-1][j],dp[i][j-1]); ????????????} ????????} ????????int?res=0; ????????res=m+n-2*dp[m][n]; ????????return?res; ????} }; |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 3:49:56- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |