classSolution{public:intminDistance(stringword1,stringword2){constintm=word1.length();constintn=word2.length();// dp[i][j] := min # of operations to convert word1[0..i) to word2[0..j)vector<vector<int>>dp(m+1,vector<int>(n+1));for(inti=1;i<=m;++i)dp[i][0]=i;for(intj=1;j<=n;++j)dp[0][j]=j;for(inti=1;i<=m;++i)for(intj=1;j<=n;++j)if(word1[i-1]==word2[j-1])dp[i][j]=dp[i-1][j-1];elsedp[i][j]=min({dp[i-1][j-1],dp[i-1][j],dp[i][j-1]})+1;returndp[m][n];}};
classSolution{publicintminDistance(Stringword1,Stringword2){finalintm=word1.length();finalintn=word2.length();// dp[i][j] := min # of operations to convert word1[0..i) to word2[0..j)int[][]dp=newint[m+1][n+1];for(inti=1;i<=m;++i)dp[i][0]=i;for(intj=1;j<=n;++j)dp[0][j]=j;for(inti=1;i<=m;++i)for(intj=1;j<=n;++j)if(word1.charAt(i-1)==word2.charAt(j-1))dp[i][j]=dp[i-1][j-1];elsedp[i][j]=Math.min(dp[i-1][j-1],Math.min(dp[i-1][j],dp[i][j-1]))+1;returndp[m][n];}}
classSolution:defminDistance(self,word1:str,word2:str)->int:m=len(word1)n=len(word2)# dp[i][j] := min # Of operations to convert word1[0..i) to word2[0..j)dp=[[0]*(n+1)for_inrange(m+1)]foriinrange(1,m+1):dp[i][0]=iforjinrange(1,n+1):dp[0][j]=jforiinrange(1,m+1):forjinrange(1,n+1):ifword1[i-1]==word2[j-1]:dp[i][j]=dp[i-1][j-1]else:dp[i][j]=min(dp[i-1][j-1],dp[i-1][j],dp[i][j-1])+1returndp[m][n]