题目:
给定两个单词1,2
计算出将1转化2所使用的最少操作数 。
只有三种操作:
插入一个字符,删除一个字符,替换一个字符。
算法:动态规划。
思路:
继续盗取:
不相等,min中的就表示的是三种操作。
还是挺难想的!!!
提高:
大佬给补了一行来解。
代码:
class Solution {
public:
int minDistance(string w1, string w2) {
if(w1.size()==0) return w2.size();
if(w2.size()==0) return w1.size();
int A[w1.size()][w2.size()];
//第一层。
int c=1;
for(int i=0;i<w1.size();i++)
{
if(w1[i]==w2[0]) c=0;
A[i][0]=i+c;
}
//第一列
c=1;
for(int i=0;i<w2.size();i++)
{
if(w1[0]==w2[i]) c=0;
A[0][i]=i+c;
}
for(int i=1;i<w1.size();i++)
for(int j=1;j<w2.size();j++)
{
if(w1[i]==w2[j]) A[i][j]=A[i-1][j-1];
else A[i][j]=min( min(A[i-1][j],A[i][j-1]),A[i-1][j-1] )+1;
}
return A[w1.size()-1][w2.size()-1];
}
};
总结:
根据转移方程写代码时,需要预先设置好哪些变量,循环该如何设置,可以通过层来分析,