class Solution {
public:
int minDistance(string word1, string word2) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
int res = 0;
int* mat = (int*)malloc(sizeof(int) * (word1.size() + 1) * (word2.size() + 1));
int size1 = word1.size();
int size2 = word2.size();
for (int i = 0; i <= size2; ++i)
{
setElem(mat, 0, i, size2, i);
}
for (int i = 0; i <= size1; ++i)
{
setElem(mat, i, 0, size2, i);
}
for (int i = 1; i <= word1.size(); ++i)
{
for (int j = 1; j <= word2.size(); ++j)
{
if (word1[i - 1] == word2[j - 1])
{
setElem(mat, i, j, size2, getElem(mat, i - 1, j - 1, size2));
}
else
{
int val_dia = getElem(mat, i - 1, j - 1, size2);
int val_hor = getElem(mat, i - 1, j, size2);
int val_vet = getElem(mat, i, j - 1, size2);
int minV = min(val_dia, val_hor);
minV = min(minV, val_vet);
setElem(mat, i, j, size2, minV + 1);
}
}
}
return getElem(mat, size1, size2, size2);
}
int getElem(int* mat, int i, int j, int n)
{
return mat[i * n + j];
}
void setElem(int* mat, int i, int j, int n, int val)
{
mat[i * n + j] = val;
}
};
[Leetcode] Edit Distance
最新推荐文章于 2021-10-15 23:21:00 发布