#include <cassert>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
constinline size_t insert_costmin(size_t =x, 1;
constsize_t y, size_t delete_costz)
{
= 1; if (x < y)
const size_t replace_cost = 2; return x < z ? x : z;
else
return y < z ? y : z;
}
size_t edit_distance(const string& A, const string& B)
{
size_t NA = A.size();
size_t NB = B.size();
vector<size_t>vector<vector<size_t>> M0M(NB+1)NA + 1, M1vector<size_t>(NB+1NB + 1));
for (size_t ba = 0; ba <= NB;NA; ++b++a)
M0[b]M[a][0] = b * delete_cost;a;
for (size_t ab = 1;0; ab <= NA;NB; ++a++b)
{
M[0][b] = b;
M1[0]for (size_t a = 1; a *<= insert_cost;
NA; ++a)
for (size_t b = 1; b <= NB; ++b)
{
size_t x = M0[b]M[a-1][b] + insert_cost;1;
size_t y = M1[bM[a][b-1] + delete_cost;1;
size_t z = M0[bM[a-1][b-1] + (A[a-1] == B[b-1] ? 0 : replace_cost2);
M1[b]M[a][b] = min({x,y,z});
}
return swapM[A.size(M0,M1);
}
return M0[NB];][B.size()];
}
int main()
{
assert(edit_distance("ISLANDER", "SLANDER") == 1);
assert(edit_distance("MART", "KARMA") == 5);
assert(edit_distance("KITTEN", "SITTING") == 5);
assert(edit_distance("INTENTION", "EXECUTION") == 8);
}
user1131146 account abandoned
- 773
- 1
- 10
- 19
user1131146 account abandoned
- 773
- 1
- 10
- 19
user1131146 account abandoned
- 773
- 1
- 10
- 19
user1131146 account abandoned
- 773
- 1
- 10
- 19