21 bool allow_replacements,
22 int max_edit_distance) {
35 vector<int> previous(n + 1);
36 vector<int> current(n + 1);
38 for (
int i = 0; i <= n; ++i)
41 for (
int y = 1; y <= m; ++y) {
43 int best_this_row = current[0];
45 for (
int x = 1; x <= n; ++x) {
46 if (allow_replacements) {
47 current[x] = min(previous[x-1] + (s1.
str_[y-1] == s2.
str_[x-1] ? 0 : 1),
48 min(current[x-1], previous[x])+1);
52 current[x] = previous[x-1];
54 current[x] = min(current[x-1], previous[x]) + 1;
56 best_this_row = min(best_this_row, current[x]);
59 if (max_edit_distance && best_this_row > max_edit_distance)
60 return max_edit_distance + 1;
62 current.swap(previous);
StringPiece represents a slice of a string whose memory is managed externally.
int EditDistance(const StringPiece &s1, const StringPiece &s2, bool allow_replacements, int max_edit_distance)