From 1394f09d277e96083e924c43fd3476beb6ede4a5 Mon Sep 17 00:00:00 2001 From: anebz Date: Sat, 30 Mar 2019 14:35:37 +0100 Subject: [PATCH] Revert "Revert "1.5. levenshtein distance"" This reverts commit 295fb6c179172a04bf624aaebab69e7de2c77891. --- .../1.5. levenshtein.java | 43 +++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 Chapter 1 Arrays and strings/1.5. levenshtein.java diff --git a/Chapter 1 Arrays and strings/1.5. levenshtein.java b/Chapter 1 Arrays and strings/1.5. levenshtein.java new file mode 100644 index 0000000..f13b421 --- /dev/null +++ b/Chapter 1 Arrays and strings/1.5. levenshtein.java @@ -0,0 +1,43 @@ +public class levenshtein { + public static boolean oneEditAway(String first, String second) { + /* Length checks. */ + if (Math.abs(first.length() - second.length()) > 1) { + return false; + } + + /* Get shorter and longer string.*/ + String s1 = first.length() < second.length() ? first : second; + String s2 = first.length() < second.length() ? second : first; + + int index1 = 0; + int index2 = 0; + boolean foundDifference = false; + + while (index2 < s2.length() && index1 < s1.length()) { + if (s1.charAt(index1) != s2.charAt(index2)) { + /* Ensure that this is the first difference found.*/ + if (foundDifference) return false; + foundDifference = true; + if (s1.length() == s2.length()) { // On replace, move shorter pointer + index1++; + } + } else { + index1++; // If matching, move shorter pointer + } + index2++; // Always move pointer for longer string + } + return true; + } + + public static void main(String[] args) { + String a = "palee"; + String b = "pale"; + boolean isOneEdit1 = oneEditAway(a, b); + System.out.println(a + ", " + b + ": " + isOneEdit1); + + String c = "pale"; + String d = "pkle"; + boolean isOneEdit2 = oneEditAway(c, d); + System.out.println(c + ", " + d + ": " + isOneEdit2); + } +} \ No newline at end of file