Click here to Skip to main content
13,737,943 members
Click here to Skip to main content
Add your own
alternative version


5 bookmarked
Posted 3 Jan 2015
Licenced CPOL

Levenshtein Algorithm in Visual Basic

, 3 Jan 2015
Rate this:
Please Sign up or sign in to vote.
How to calculate the distance between two strings according to Levenshtein algorithm


Levenshtein's distance measures the minimum number of character edits required to change a word into another. In this tip, we'll see a simple implementation of the Levenshtein algorithm in Visual Basic. It will be useful in several situations, when managing - for example - large amount of text, and we are in need of fast and massive modifications in our data, to spot and correct typos, or to match strings in terms of similarity, and not simply in terms of equal/not equal. Levenshtein's algorithm allows to compute a score regarding string similarity. We'll see how in a moment.

Standard Levenshtein Algorithm

Here follows the standard Levenshtein implementation in VB.NET, according to the algorithm as shown at Wikipedia.

Public Function Levenshtein(ByVal s As String, ByVal t As String) As Integer
  Dim n As Integer = s.Length
  Dim m As Integer = t.Length
  Dim d(n + 1, m + 1) As Integer

  If n = 0 Then
      Return m
  End If
  If m = 0 Then
      Return n
  End If

  Dim i As Integer
  Dim j As Integer

  For i = 0 To n
      d(i, 0) = i
  For j = 0 To m
      d(0, j) = j
  For i = 1 To n
      For j = 1 To m
          Dim cost As Integer
          If t(j - 1) = s(i - 1) Then
             cost = 0
             cost = 1
          End If
          d(i, j) = Math.Min(Math.Min(d(i - 1, j) + 1, d(i, j - 1) + 1), d(i - 1, j - 1) + cost)
  Return d(n, m)
End Function


Using the above function(s) is trivial: it's sufficient to call it by passing two strings, plus the optional boolean flag for case-sensitivity check. Some examples could be:

MsgBox(Levenshtein("Inwards", "inwards").ToString)       ' Returns 1
MsgBox(Levenshtein("Inwards", "inwards").ToString)       ' Returns 1
MsgBox(Levenshtein("towards", "towards").ToString)       ' Returns 0
MsgBox(Levenshtein("dinner", "breakfast").ToString)      ' Returns 9
MsgBox(Levenshtein("breakfast", "braekfast").ToString)   ' Returns 2

MsgBox(Levenshtein("efficient", "sufficient").ToString)  ' Returns 2
MsgBox(Levenshtein("grandma", "anathema").ToString)      ' Returns 5
MsgBox(Levenshtein("aunt", "ant").ToString)              ' Returns 1

The results (1, 0, 0, 9, 2, 2, 5, 1) are the Levenshtein's distances between given strings, i.e., a score regarding strings similarity. The lower the score, the nearer are the two entities. A value of zero means, obviously, a total convergence of the two. We could use a function like this (with predetermined conditions to be satisfied, like "the score must not exceed 3", for example) to correct typos (as in the "breakfast - braekfast" example), or to search for differences in hypothetical data (like "new York - New York"), and so on.



  • 2015-01-06 Added standard algorithm, revised text, revised code
  • 2015-01-03 First release for CodeProject


This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


About the Author

Emiliano Musso
Software Developer
Italy Italy
Working in IT since 2003 as Software Developer for Essetre Srl, a company in Northern Italy.
I was awarded in 2014, 2015 and 2016 with Microsoft MVP, for Visual Studio and Development Technologies expertise. My technology interests and main skills are in .NET Framework, Visual Basic, Visual C# and SQL Server, but i'm proficient in PHP and MySQL also.

You may also be interested in...

Comments and Discussions

GeneralMy vote of 1 Pin
Etter Frédéric5-Jan-15 21:43
memberEtter Frédéric5-Jan-15 21:43 
BugWrong code - Sorry Pin
Etter Frédéric5-Jan-15 21:42
memberEtter Frédéric5-Jan-15 21:42 
GeneralRe: Wrong code - Sorry Pin
Emiliano Musso5-Jan-15 22:21
memberEmiliano Musso5-Jan-15 22:21 
GeneralRe: Wrong code - Sorry Pin
Etter Frédéric6-Jan-15 2:46
memberEtter Frédéric6-Jan-15 2:46 
GeneralRe: Wrong code - Sorry Pin
Emiliano Musso6-Jan-15 6:02
memberEmiliano Musso6-Jan-15 6:02 
GeneralMy vote of 1 Pin
Etter Frédéric5-Jan-15 21:36
memberEtter Frédéric5-Jan-15 21:36 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

Permalink | Advertise | Privacy | Cookies | Terms of Use | Mobile
Web01-2016 | 2.8.180920.1 | Last Updated 3 Jan 2015
Article Copyright 2015 by Emiliano Musso
Everything else Copyright © CodeProject, 1999-2018
Layout: fixed | fluid