动态规划:编辑距离

题目:

给定两个单词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];
        
    }
};

总结:

根据转移方程写代码时,需要预先设置好哪些变量,循环该如何设置,可以通过层来分析,

发布了48 篇原创文章 · 获赞 20 · 访问量 635

猜你喜欢

转载自blog.csdn.net/weixin_42721412/article/details/102975424