Changeset 7284 for code/trunk/src/libraries/util/StringUtils.cc
- Timestamp:
- Aug 31, 2010, 3:37:40 AM (15 years ago)
- Location:
- code/trunk
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
code/trunk
- Property svn:mergeinfo changed
-
code/trunk/src/libraries/util/StringUtils.cc
r6424 r7284 35 35 36 36 #include <cctype> 37 #include <boost/scoped_array.hpp> 37 38 #include "Convert.h" 38 39 #include "Math.h" … … 514 515 @return Number of replacements 515 516 */ 516 _UtilExportsize_t replaceCharacters(std::string& str, char target, char replacement)517 size_t replaceCharacters(std::string& str, char target, char replacement) 517 518 { 518 519 size_t j = 0; … … 527 528 return j; 528 529 } 530 531 /** 532 @brief Calculates the Levenshtein distance between two strings. 533 534 The Levenshtein distance is defined by the number of transformations needed to convert str1 535 into str2. Possible transformations are substituted, added, or removed characters. 536 */ 537 unsigned int getLevenshteinDistance(const std::string& str1, const std::string& str2) 538 { 539 size_t cols = str1.size() + 1; 540 size_t rows = str2.size() + 1; 541 boost::scoped_array<int> matrix(new int[rows * cols]); 542 543 for (size_t r = 0; r < rows; ++r) 544 for (size_t c = 0; c < cols; ++c) 545 matrix[r*cols + c] = 0; 546 547 for (size_t i = 1; i < cols; ++i) 548 matrix[0*cols + i] = i; 549 for (size_t i = 1; i < rows; ++i) 550 matrix[i*cols + 0] = i; 551 552 for (size_t r = 1; r < rows; ++r) 553 for (size_t c = 1; c < cols; ++c) 554 matrix[r*cols + c] = (str1[c-1] != str2[r-1]); 555 556 for (size_t r = 1; r < rows; ++r) 557 for (size_t c = 1; c < cols; ++c) 558 matrix[r*cols + c] = std::min(std::min(matrix[(r-1)*cols + c] + 1, 559 matrix[r*cols + c-1] + 1), 560 matrix[(r-1)*cols + c-1] + (str1[c-1] != str2[r-1])); 561 562 return matrix[(rows-1)*cols + cols-1]; 563 } 529 564 }
Note: See TracChangeset
for help on using the changeset viewer.