LeetCode72 编辑距离

Miki ·
更新时间:2024-11-11
· 743 次阅读

LeetCode72 编辑距离

在这里插入图片描述在这里插入图片描述
算法思想:这是一个经典的笔试面试题。这里用到DP的方法求解,dp(i)(j)表示的是第一个字符串的第i个位置和第二个字符串的第j个位置的编辑距离。要计算这个编辑距离就可以从dp(i-1)(j-1)和dp(i-1)(j)和dp(i)(j-1)这几个角度去考虑。当第i-1个字符和第j-1个字符相等的时候,dp(i)(j)=dp(i-1)(j-1),否则的话,可能是修改第i个字符,dp(i)(j) = dp(i-1)(j-1)+1,或者在第i-1个字符后添加一个字符,dp(i)(j) = dp(i-1)(j)+1,或者是在第j-1个字符后添加一个字符,dp(i)(j) = dp(i)(j-1)+1,在这几种方案里面取最小值即可。这里需要进行的初始化是假设一个串为空的情况,比如dp(i)(0) =i,表示第二个字符串需要添加i个字符,dp(0)(j) = j,表示第一个字符串添加j个字符。

class Solution { public: int minDistance(string word1, string word2) { int m = word1.size(),n = word2.size(); if(m*n==0) return n+m; //有一个串为空串的情况 vector<vector> dp(m+1,vector(n+1)); for(int i=0;i<m+1;i++) dp[i][0] = i; for(int j=0;j<n+1;j++) dp[0][j] = j; for(int i=1;i<m+1;i++){ for(int j=1;j<n+1;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],min(dp[i][j-1],dp[i-1][j-1]))+1; } } return dp[m][n]; } };
作者:XinyueRao



编辑距离 leetcode

需要 登录 后方可回复, 如果你还没有账号请 注册新账号