Skip to content

Commit 75142c0

Browse files
committed
Add back short-circuit optimizations to avoid array allocations on empty strings for OSA, Lev, and Weighted Lev
1 parent 6135d39 commit 75142c0

File tree

3 files changed

+24
-0
lines changed

3 files changed

+24
-0
lines changed

src/main/java/info/debatty/java/stringsimilarity/Levenshtein.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,14 @@ public final double distance(final String s1, final String s2) {
5050
return 0;
5151
}
5252

53+
if (s1.length() == 0) {
54+
return s2.length();
55+
}
56+
57+
if (s2.length() == 0) {
58+
return s1.length();
59+
}
60+
5361
// create two work vectors of integer distances
5462
int[] v0 = new int[s2.length() + 1];
5563
int[] v1 = new int[s2.length() + 1];

src/main/java/info/debatty/java/stringsimilarity/OptimalStringAlignment.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,14 @@ public final double distance(final String s1, final String s2) {
6565

6666
int n = s1.length(), m = s2.length();
6767

68+
if (n == 0) {
69+
return m;
70+
}
71+
72+
if (m == 0) {
73+
return n;
74+
}
75+
6876
// Create the distance matrix H[0 .. s1.length+1][0 .. s2.length+1]
6977
int[][] d = new int[n + 2][m + 2];
7078

src/main/java/info/debatty/java/stringsimilarity/WeightedLevenshtein.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,14 @@ public final double distance(final String s1, final String s2) {
6464
return 0;
6565
}
6666

67+
if (s1.length() == 0) {
68+
return s2.length();
69+
}
70+
71+
if (s2.length() == 0) {
72+
return s1.length();
73+
}
74+
6775
// create two work vectors of integer distances
6876
double[] v0 = new double[s2.length() + 1];
6977
double[] v1 = new double[s2.length() + 1];

0 commit comments

Comments
 (0)