acwing 902 最短编辑距离

简介: acwing 902 最短编辑距离

活动 - AcWing

优题解:AcWing 902. 最短编辑距离 - AcWing

一共有三个操作方式:

1.删除操作:插入操作之前即前 i - 1 个和 前 j 已经排好 即 f[i-1][j] + 1 ;

2.插入操作:删除操作之前即前 i 个和 前 j - 1 个已经拍好即 f[i][j-1] + 1 ;

3:替换操作: 替换操作之前即前  i-1 个和前 j-1个已经排好


                       这时候又要分成两种情况:1.a[i]和b[j] 相同 则f[i-1][j-1]


                                                                   2.a[i]和b[j] 不相同则 f[i-1][j-1] + 1  

下面是一些细节问题,不想一一再过了:

#include<iostream>
#include<cstring>
#include<algorithm>
 
using namespace std ;
const int N = 1010 ,INF = 1e9 ;;
int f[N][N] ;
char a[N] , b[N] ;
int n,m ;
int main(){
  cin >> n >> a+1 ;
  cin >> m >> b+1 ;
 
  for(int i = 1 ;i <= n ; i++ ) f[i][0] = i ;//第二个字符串长度为0 即将第一个字符串全部删除 
  for(int i = 1 ;i <= m ; i ++) f[0][i] = i ;//第一个字符串长度为0 即全部插入和第二个字符串删除的 
  for(int i = 1 ; i<= n ; i ++){//遍历第一个字符串, 
    for(int j = 1 ; j <= m ; j ++){//遍历第二个字符串,当两个字符串出现一样的时候就可以进行特殊处理 
      f[i][j] =  min(f[i-1][j]+1,f[i][j-1] + 1) ;
      if(a[i]==b[j]) f[i][j] =  min(f[i-1][j-1] , f[i][j]) ;
      else f[i][j] = min(f[i-1][j-1] + 1 , f[i][j]);
    }
  }
  cout << f[n][m] << endl ;
  return 0 ;
}  

目录
相关文章
|
6月前
leetcode-72:编辑距离
leetcode-72:编辑距离
48 0
|
算法 测试技术 C++
C++算法:最短回文串
C++算法:最短回文串
【动态规划刷题 13】最长递增子序列&& 摆动序列
【动态规划刷题 13】最长递增子序列&& 摆动序列
|
1月前
acwing 895 最长上升子序列1
acwing 895 最长上升子序列1
28 3
|
1月前
acwing 896 最长上升子序列II
acwing 896 最长上升子序列II
25 2
|
1月前
acwing 897 最长公共子序列
acwing 897 最长公共子序列
20 0
acwing 897 最长公共子序列
|
1月前
lanqiao oj 1628 最短循环节问题
lanqiao oj 1628 最短循环节问题
7 0
Acwing 3692. 最长连续公共子序列
Acwing 3692. 最长连续公共子序列
64 0
|
人工智能
线性DP——AcWing 898. 数字三角形、AcWing 895. 最长上升子序列
线性DP——AcWing 898. 数字三角形、AcWing 895. 最长上升子序列
81 0