leetCode72. 编辑距离
基本思路:
代码
class Solution {
public:int minDistance(string a, string b) {// a,b的0不做表示,所以从1开始,dp状态表示,这种办法会很方便a = ' ' + a, b = ' ' + b;int n = a.size();int m = b.size(); // 定义状态数组vector<vector<int>> f(n + 1, vector<int>(m + 1));// 初始化集合的边界for(int i = 1; i <= n; i++) f[i][0] = i;// 以上表示当b为空串,a有i个字符串,a->b,或者b->a要增加i次,或者删除i次for(int i = 1; i <= m; i++) f[0][i] = i;for(int i = 1; i <= n; i++){for(int j = 1; j <= m; j++){f[i][j] = min(f[i][j - 1], f[i - 1][j]) + 1; // 此赋值表达式折合着四种情况int t = a[i] != b[j]; // 不等为1,相等为0f[i][j] = min(f[i][j], f[i - 1][j - 1] + t); // 结合上面共计六种情况}}return f[n][m];}
};