What is the Edit Distance (Levenshtein distance) between two strings?
It is the minimum number of single-character edits (insertions, deletions, or substitutions) required to change one string into the other.
Click to reveal answer
beginner
Which operations are allowed in calculating Levenshtein distance?
Insertion, deletion, and substitution of a single character.
Click to reveal answer
intermediate
What is the base case when using dynamic programming to compute Levenshtein distance?
When one string is empty, the distance is the length of the other string (all insertions or deletions).
Click to reveal answer
intermediate
How does the dynamic programming table for Levenshtein distance get filled?
Each cell represents the minimum edit distance between prefixes of the two strings, computed using values from neighboring cells (top, left, and top-left).
Click to reveal answer
beginner
Why is Levenshtein distance useful in real life?
It helps in spell checking, DNA sequence analysis, and natural language processing by measuring how similar two strings are.
Click to reveal answer
Which of the following is NOT an allowed operation in Levenshtein distance?
ASubstitution
BDeletion
CTransposition
DInsertion
✗ Incorrect
Levenshtein distance allows insertion, deletion, and substitution, but not transposition (swapping two adjacent characters).
What is the Levenshtein distance between the strings "cat" and "cut"?
A3
B2
C0
D1
✗ Incorrect
Only one substitution (a -> u) is needed, so the distance is 1.
If one string is empty and the other has length 5, what is the Levenshtein distance?
A0
B5
CCannot be determined
D1
✗ Incorrect
Distance equals the length of the non-empty string because all characters must be inserted or deleted.
In dynamic programming for Levenshtein distance, what does the cell dp[i][j] represent?
ADistance between prefixes of length i and j
BDistance between full strings
CNumber of substitutions only
DLength of the longest common subsequence
✗ Incorrect
dp[i][j] stores the minimum edit distance between the first i characters of one string and the first j characters of the other.
Which real-life application uses Levenshtein distance?
ASpell checking
BSorting numbers
CCalculating factorial
DRendering graphics
✗ Incorrect
Spell checking uses Levenshtein distance to find words close to a misspelled word.
Explain how dynamic programming helps compute the Levenshtein distance between two strings.
Think about how you compare smaller parts of the strings step by step.
You got /4 concepts.
Describe the three operations allowed in Levenshtein distance and give a simple example for each.
Imagine changing one word into another by editing letters.
You got /4 concepts.
Practice
(1/5)
1. What does the Edit Distance (Levenshtein distance) between two strings measure?
easy
A. The minimum number of single-character edits to change one string into the other
B. The number of common characters between two strings
C. The length of the longest common substring
D. The number of characters in the longer string
Solution
Step 1: Understand the definition of Edit Distance
Edit Distance counts how many changes (insert, delete, replace) are needed to convert one string to another.
Step 2: Compare options with definition
Only The minimum number of single-character edits to change one string into the other correctly describes this minimum number of single-character edits.
Final Answer:
The minimum number of single-character edits to change one string into the other -> Option A
Quick Check:
Edit Distance = minimum edits [OK]
Hint: Edit Distance counts minimal edits to match strings [OK]
Common Mistakes:
Confusing with longest common substring
Thinking it counts common characters
Assuming it measures string length
2. Which of the following Python code snippets correctly initializes a 2D list for dynamic programming of size (m+1) x (n+1)?
easy
A. dp = [0] * (m+1) * (n+1)
B. dp = [[0] * (n+1) for _ in range(m+1)]
C. dp = [[0] * m for _ in range(n)]
D. dp = [[0] * (m+1)] * (n+1)
Solution
Step 1: Understand 2D list initialization in Python
Using list comprehension with separate inner lists avoids shared references.
Step 2: Analyze each option
dp = [[0] * (n+1) for _ in range(m+1)] correctly creates independent rows. dp = [[0] * (m+1)] * (n+1) creates shallow copies causing bugs. Options A and C have wrong dimensions or types.
Final Answer:
dp = [[0] * (n+1) for _ in range(m+1)] -> Option B
Quick Check:
Proper 2D list init = dp = [[0] * (n+1) for _ in range(m+1)] [OK]
Hint: Use list comprehension for 2D lists to avoid shared rows [OK]
Common Mistakes:
Using multiplication for 2D lists causing shared references
Mixing up m and n dimensions
Creating 1D list instead of 2D
3. What is the output of the following Python code snippet that calculates the Levenshtein distance between 'kitten' and 'sitting'?
def levenshtein(s1, s2):
m, n = len(s1), len(s2)
dp = [[0] * (n+1) for _ in range(m+1)]
for i in range(m+1):
dp[i][0] = i
for j in range(n+1):
dp[0][j] = j
for i in range(1, m+1):
for j in range(1, n+1):
if s1[i-1] == s2[j-1]:
dp[i][j] = dp[i-1][j-1]
else:
dp[i][j] = 1 + min(dp[i-1][j], dp[i][j-1], dp[i-1][j-1])
return dp[m][n]
print(levenshtein('kitten', 'sitting'))
medium
A. 4
B. 5
C. 3
D. 6
Solution
Step 1: Understand the Levenshtein distance calculation
Compare 'kitten' and 'sitting' stepwise counting minimal edits: substitute 'k'->'s' (kitten -> sitten), substitute 'e'->'i' (sitten -> sittin), insert 'g' at end (sittin -> sitting). Total 3 edits.
Step 2: Verify with code logic
The code correctly implements the DP approach and returns dp[m][n] which is 3 for these inputs.
4. Identify the bug in this Levenshtein distance code snippet:
def levenshtein_bug(s1, s2):
m, n = len(s1), len(s2)
dp = [[0] * (n+1)] * (m+1)
for i in range(m+1):
dp[i][0] = i
for j in range(n+1):
dp[0][j] = j
for i in range(1, m+1):
for j in range(1, n+1):
if s1[i-1] == s2[j-1]:
dp[i][j] = dp[i-1][j-1]
else:
dp[i][j] = 1 + min(dp[i-1][j], dp[i][j-1], dp[i-1][j-1])
return dp[m][n]
medium
A. Using dp = [[0] * (n+1)] * (m+1) causes all rows to reference the same list
B. The loops should start from 0 instead of 1
C. The condition s1[i-1] == s2[j-1] should be s1[i] == s2[j]
D. The return statement should be dp[0][0]
Solution
Step 1: Analyze dp initialization
Using multiplication to create dp causes all rows to point to the same list, so updating one row updates all rows.
Step 2: Understand impact on algorithm
This shared reference breaks the DP table updates, causing incorrect results.
Final Answer:
Using dp = [[0] * (n+1)] * (m+1) causes all rows to reference the same list -> Option A
Quick Check:
Shared row references cause bugs [OK]
Hint: Avoid list multiplication for 2D lists; use list comprehension [OK]
Common Mistakes:
Using wrong dp initialization
Incorrect loop ranges
Wrong indexing in condition
5. Given two strings s1 = 'intention' and s2 = 'execution', what is the minimum edit distance using Levenshtein algorithm? Consider insert, delete, and replace operations each cost 1.
hard
A. 7
B. 5
C. 4
D. 6
Solution
Step 1: Compare strings and count minimal edits
Transform 'intention' to 'execution' requires the minimum number of single-character edits (insertions, deletions, substitutions) of 6.
Step 2: Confirm with Levenshtein DP logic
Dynamic programming confirms minimum edits as 6 for these strings.
Final Answer:
6 -> Option D
Quick Check:
Levenshtein('intention','execution') = 6 [OK]
Hint: Count replacements and insertions carefully for longer strings [OK]
Common Mistakes:
Underestimating number of replacements
Ignoring insertions
Confusing with Hamming distance
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.