讯美网站建设,建站宝盒模板,wordpress 简洁模板,120平米花6万装修效果图动态规划
思路#xff1a; 假设 dp[i][j] 是 s1 长度 i 和 s2 长度 j 两个字符串的最小 ASCII 删除和#xff1b;dp[i][j] 可以由#xff1a; 如果 s1 的第 i 个字符#xff08;s1[i - 1]#xff09;和 s2 的第 j 个字符#xff08;s2[j - 1]#xff09;不相等#xf…动态规划
思路 假设 dp[i][j] 是 s1 长度 i 和 s2 长度 j 两个字符串的最小 ASCII 删除和dp[i][j] 可以由 如果 s1 的第 i 个字符s1[i - 1]和 s2 的第 j 个字符s2[j - 1]不相等则 dp[i - 1][j] 加上删除 s1 的第 i 个字符即dp[i][j] dp[i - 1][j] s1(i - 1);dp[i][j - 1] 加上删除 s2 的第 j 个字符即dp[i][j] dp[i][j - 1] s2(j - 1);取其中最小值即可如果 s1 的第 i 个字符和 s2 的第 j 个字符相等则 dp[i][j] dp[i - 1][j - 1]如果两个都是空串删除和为0即 dp[0][0] 0如果有一个是空串则删除和为另一个字符串所有字符的 ASCII 和 dp[i][0] dp[i - 1][0] s1[i - 1]dp[0][j] dp[0][j - 1] s2[j - 1]
class Solution {
public:int minimumDeleteSum(string s1, string s2) {int m s1.size();int n s2.size();std::vectorstd::vectorint dp(m 1, std::vectorint(n 1));dp[0][0] 0;for (int i 1; i m 1; i) {dp[i][0] dp[i - 1][0] s1[i - 1];}for (int j 1; j n 1; j) {dp[0][j] dp[0][j - 1] s2[j - 1];}for (int i 1; i m 1; i) {for (int j 1; j n 1; j) {if (s1[i - 1] s2[j - 1]) {dp[i][j] dp[i - 1][j - 1];} else {dp[i][j] std::min(dp[i - 1][j] s1[i - 1], dp[i][j - 1] s2[j - 1]);}}}return dp[m][n];}
};
———————————————————————————————————————