levenshtein.dart 568 B

1234567891011121314151617181920212223242526
  1. import 'dart:math';
  2. int levenshtein(String s, String t, {bool caseSensitive = true}) {
  3. if (!caseSensitive) {
  4. s = s.toLowerCase();
  5. t = t.toLowerCase();
  6. }
  7. if (s == t) return 0;
  8. final v0 = List<int>.generate(t.length + 1, (i) => i);
  9. final v1 = List<int>.filled(t.length + 1, 0);
  10. for (var i = 0; i < s.length; i++) {
  11. v1[0] = i + 1;
  12. for (var j = 0; j < t.length; j++) {
  13. final cost = (s[i] == t[j]) ? 0 : 1;
  14. v1[j + 1] = min(v1[j] + 1, min(v0[j + 1] + 1, v0[j] + cost));
  15. }
  16. v0.setAll(0, v1);
  17. }
  18. return v1[t.length];
  19. }