22 bool allow_replacements,
23 int max_edit_distance) {
36 int m =
static_cast<int>(s1.
len_);
37 int n =
static_cast<int>(s2.
len_);
39 std::vector<int> row(n + 1);
40 for (
int i = 1; i <= n; ++i)
43 for (
int y = 1; y <= m; ++y) {
45 int best_this_row = row[0];
48 for (
int x = 1; x <= n; ++x) {
50 if (allow_replacements) {
51 row[x] = std::min(previous + (s1.
str_[y - 1] == s2.
str_[x - 1] ? 0 : 1),
52 std::min(row[x - 1], row[x]) + 1);
55 if (s1.
str_[y - 1] == s2.
str_[x - 1])
58 row[x] = std::min(row[x - 1], row[x]) + 1;
61 best_this_row = std::min(best_this_row, row[x]);
64 if (max_edit_distance && best_this_row > max_edit_distance)
65 return max_edit_distance + 1;
int EditDistance(const StringPiece &s1, const StringPiece &s2, bool allow_replacements, int max_edit_distance)
StringPiece represents a slice of a string whose memory is managed externally.