#include <iostream>
#include <string>
#include <algorithm>
#include <vector>
int dfs (std::vector<std::vector<int>>& memo,std::string dna1, std::string dna2, int i, int j){
if(i < 0 || j < 0){//当遍历的编号超过范围
return abs(i - j);
}
if(memo[i][j] != -1){
return memo[i][j];
}
if(dna1[i] == dna2[j]){
memo[i][j] = dfs(memo, dna1, dna2, i-1,j-1);
}else{
//增加 删除 替换
memo[i][j] = std::min({dfs(memo, dna1, dna2, i-1, j) + 1, dfs(memo, dna1, dna2, i,j-1) + 1, dfs(memo, dna1, dna2, i-1,j-1) + 1});
}
return memo[i][j];
}
int solution(std::string dna1, std::string dna2) {
// Please write your code here
int n1 = dna1.size();
int n2 = dna2.size();
std::vector<std::vector<int>> memo(n1, std::vector<int> (n2, -1));
return dfs(memo, dna1, dna2, dna1.size() - 1, dna2.size() - 1);
}
int ma