docs: public static int getEditDistance(String source, String target, boolean caseSensitive) {
  
      // Levenshtein distance algorithm
  
      int sourceLength = isEmptyOrWhitespace(source) ? 0 : source.length();
      int targetLength = isEmptyOrWhitespace(target) ? 0 : target.length();
  
      if (sourceLength == 0) {
        return targetLength;
      }
  
      if (targetLength == 0) {
        return sourceLength;
      }
  
      if (!caseSensitive) {
        source = Ascii.toLowerCase(source);
        target = Ascii.toLowerCase(target);
      }
  
      int[][] levMatrix = new int[sourceLength + 1][targetLength + 1];
  
      for (int i = 0; i <= sourceLength; i++) {
        levMatrix[i][0] = i;
      }
  
      for (int i = 0; i <= targetLength; i++) {
        levMatrix[0][i] = i;
      }
  
      for (int i = 1; i <= sourceLength; i++) {
  
        char sourceI = source.charAt(i - 1);
        for (int j = 1; j <= targetLength; j++) {
          char targetJ = target.charAt(j - 1);
  
          int cost = 0;
          if (sourceI != targetJ) {
            cost = 1;
          }
  
          levMatrix[i][j] =
              Ints.min(
                  cost + levMatrix[i - 1][j - 1], levMatrix[i - 1][j] + 1, levMatrix[i][j - 1] + 1);
        }
      }
  
      return levMatrix[sourceLength][targetLength];
    }