diff options
| author | Markus Mittendrein <git@maxmitti.tk> | 2018-06-06 21:37:05 +0200 |
|---|---|---|
| committer | Markus Mittendrein <git@maxmitti.tk> | 2018-06-06 21:42:39 +0200 |
| commit | 6cfb0e4b2bd7904c771914dd5030c54a2540e156 (patch) | |
| tree | 27bd671e5d8089d0f612fe2e7c98eeaee1de9bbe /src/CRSMUtil.cpp | |
| parent | 76c1fa19375b39630c180e0702c5be7b199e99d2 (diff) | |
| download | manager-6cfb0e4b2bd7904c771914dd5030c54a2540e156.tar.gz manager-6cfb0e4b2bd7904c771914dd5030c54a2540e156.zip | |
Move damerauLevenshteinDistance from qt-config's Util to CRSM's own Util
Diffstat (limited to 'src/CRSMUtil.cpp')
| -rw-r--r-- | src/CRSMUtil.cpp | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/src/CRSMUtil.cpp b/src/CRSMUtil.cpp new file mode 100644 index 0000000..91fa057 --- /dev/null +++ b/src/CRSMUtil.cpp @@ -0,0 +1,50 @@ +#include "CRSMUtil.hpp" + +namespace Util { + int damerauLevenshteinDistance(const QString& s1, const QString& s2) + { + int length1 = s1.length(); + int length2 = s2.length(); + int d[length1+1][length2+1]; + + int i; + int j; + int cost; + + for(i = 0; i <= length1; i++) + { + d[i][0] = i; + } + for(j = 0; j <= length2; j++) + { + d[0][j] = j; + } + for (i = 0; i < length1;i++) + { + for(j = 0; j < length2; j++) + { + if(s1[i] == s2[j]) + { + cost = 0; + } + else + { + cost = 1; + } + d[i+1][j+1] = std::min({ + d[i][j+1] + 1, // delete + d[i+1][j] + 1, // insert + d[i][j] + cost // substitution + }); + if((i > 0) && (j > 0) && (s1[i] == s2[j-1]) && (s1[i-1] == s2[j])) + { + d[i+1][j+1] = std::min( + d[i+1][j+1], + d[i-1][j-1] + cost // transposition + ); + } + } + } + return d[length1][length2]; + } +} |
