From e364525ba8d8767376f4ab19595e5ccf38016d3f Mon Sep 17 00:00:00 2001 From: jasper Date: Sun, 21 Jun 2020 17:23:18 -0400 Subject: [PATCH] =?UTF-8?q?=E6=8F=90=E4=BE=9BC++=E8=A7=A3=E6=B3=95?= =?UTF-8?q?=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...26\350\276\221\350\267\235\347\246\273.md" | 31 ++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git "a/\345\212\250\346\200\201\350\247\204\345\210\222\347\263\273\345\210\227/\347\274\226\350\276\221\350\267\235\347\246\273.md" "b/\345\212\250\346\200\201\350\247\204\345\210\222\347\263\273\345\210\227/\347\274\226\350\276\221\350\267\235\347\246\273.md" index 4e4146b..920806a 100644 --- "a/\345\212\250\346\200\201\350\247\204\345\210\222\347\263\273\345\210\227/\347\274\226\350\276\221\350\267\235\347\246\273.md" +++ "b/\345\212\250\346\200\201\350\247\204\345\210\222\347\263\273\345\210\227/\347\274\226\350\276\221\350\267\235\347\246\273.md" @@ -262,8 +262,37 @@ class Node { ![labuladong](../pictures/labuladong.png) +Jinglun Zhou 提供C++解法代码: + +```CPP + +class Solution { +public: + int minDistance(string s1, string s2) { + int m=s1.size(), n=s2.size(); + vector> dp(m+1,vector(n+1)); + for(int i=1;i<=m;i++) + dp[i][0]=i; // base case: 当s2为空,s1需要删除所有字符才能与s2相等 + for(int j=1;j<=n;j++) + dp[0][j]=j; // base case: 当s1为空, s1需要不断插入新字符才能与s2相等 + //自底向上求解 + for(int i=1;i<=m;i++) + for(int j=1;j<=n;j++) + if(s1[i-1]==s2[j-1]) // 两个字符串当前的字符一样 + dp[i][j]=dp[i-1][j-1]; + else // 两个字符串当前的字符不同 + //使得s1[0:i]和s2[0:j]相同的最短编辑距离可通过插入,删除或替换三种操作其中一种得到 + dp[i][j]=min({ + dp[i-1][j]+1, // 删除s1[i]这个字符 + dp[i][j-1]+1, // 在s1[i]后面加一个和s2[j]相同的字符 + dp[i-1][j-1]+1}); // 将s1[i]的字符替换为s2[j]的字符 + //储存着整个 s1 和 s2 的最小编辑距离 + return dp[m][n]; + } +}; +``` [上一篇:动态规划设计:最长递增子序列](../动态规划系列/动态规划设计:最长递增子序列.md) [下一篇:经典动态规划问题:高楼扔鸡蛋](../动态规划系列/高楼扔鸡蛋问题.md) -[目录](../README.md#目录) \ No newline at end of file +[目录](../README.md#目录) -- GitLab