static int levenWithSwapsIC(S s, S t) { // degenerate cases if (s.equals(t)) return 0; int ls = s.length(), lt = t.length(); if (ls == 0) return lt; if (lt == 0) return ls; int[] vx = new int[lt + 1]; int[] v0 = new int[lt + 1]; int[] v1 = new int[lt + 1]; for (int i = 0; i < v0.length; i++) v0[i] = i; for (int i = 0; i < ls; i++) { v1[0] = i + 1; for (int j = 0; j < lt; j++) { int cost = equalsIgnoreCase(s.charAt(i), t.charAt(j)) ? 0 : 1; v1[j + 1] = Math.min(Math.min( v1[j] + 1, // delete v0[j + 1] + 1), // insert v0[j] + cost); // edit } // rotate arrays int[] v = vx; vx = v0; v0 = v1; v1 = v; } return v0[lt]; }