longestCommonSubstring(x1… xn, y1… ym)
L = new int[0..n, 0..m]
S = new int[0..n, 0..m]
for i = 0, ..., n
L[i,0] = 0
S[i,0] = 0
for j = 0, ..., m
L[0,j] = 0
S[0,j] = 0
for i = 1, ..., n
for j = 1, ..., m
if xi = yj
S[i,j] = 1 + S[i-1,j-1]
L[i,j] = max(S[i,j], L[i-1,j], L[i,j-1])
else
S[i,j] = 0
L[i,j] = max(L[i-1,j], L[i,j-1])
return L[n,m]