11#ifndef TLX_STRING_LEVENSHTEIN_HEADER
12#define TLX_STRING_LEVENSHTEIN_HEADER
36 static inline bool char_equal(
const char& a,
const char& b)
48 static inline bool char_equal(
const char& a,
const char& b)
65template <
typename Param>
68 const char* b,
size_t b_size) {
71 if (a_size == 0)
return b_size * Param::cost_insert_delete;
72 if (b_size == 0)
return a_size * Param::cost_insert_delete;
75 if (a_size < b_size) {
77 std::swap(a_size, b_size);
85 for (
size_t i = 0; i < a_size + 1; i++) {
90 for (
size_t j = 1; j < b_size + 1; j++)
93 std::swap(lastrow, thisrow);
98 for (
size_t i = 1; i < a_size + 1; i++)
101 thisrow[i] = std::min(
104 thisrow[i - 1] + Param::cost_insert_delete,
106 lastrow[i] + Param::cost_insert_delete),
109 Param::char_equal(a[i - 1], b[j - 1])
110 ? 0 : Param::cost_replace)
116 return thisrow[a_size];
130 a, std::strlen(a), b, std::strlen(b));
144 a, std::strlen(a), b, std::strlen(b));
156static inline size_t levenshtein(
const std::string& a,
const std::string& b) {
158 a.data(), a.size(), b.data(), b.size());
173 a.data(), a.size(), b.data(), b.size());
Simpler non-growing vector without initialization.
static size_t levenshtein_icase(const char *a, const char *b)
Computes the Levenshtein string distance between two strings.
char to_lower(char ch)
Transform the given character to lower case without any localization.
static size_t levenshtein_algorithm(const char *a, size_t a_size, const char *b, size_t b_size)
Computes the Levenshtein string distance also called edit distance between two strings.
static size_t levenshtein(const char *a, const char *b)
Computes the Levenshtein string distance between two strings.
Standard parameters to Levenshtein distance function.
static bool char_equal(const char &a, const char &b)
static const unsigned int cost_insert_delete
static const unsigned int cost_replace
Standard parameters to levenshtein distance function.
static bool char_equal(const char &a, const char &b)
static const unsigned int cost_insert_delete
static const unsigned int cost_replace