25 const size_t m = left.size();
26 const size_t n = right.size();
28 std::vector<std::vector<size_t>> dp(m + 1, std::vector<size_t>(n + 1, 0));
30 for (
size_t i = 0; i <= m; ++i)
32 for (
size_t j = 0; j <= n; ++j)
35 for (
size_t i = 1; i <= m; ++i) {
36 for (
size_t j = 1; j <= n; ++j) {
37 int substitution_cost = (left[i - 1] == right[j - 1]) ? 0 : 1;
38 dp[i][j] = std::min({dp[i - 1][j] + 1, dp[i][j - 1] + 1,
39 dp[i - 1][j - 1] + substitution_cost});
47 const std::vector<std::string> &collection,
const std::string &pattern,
48 const int max_results)
50 std::vector<std::pair<size_t, std::string>> distance_pairs;
52 for (
const auto &item : collection) {
54 distance_pairs.emplace_back(distance, item);
57 std::sort(distance_pairs.begin(), distance_pairs.end(),
58 [](
const auto &a,
const auto &b) { return a.first < b.first; });
60 std::vector<std::string> result;
61 for (
size_t i = 0; i < std::min<size_t>(distance_pairs.size(), max_results);
63 result.push_back(distance_pairs[i].second);