input: 
  class StringComparator:
  
      def __init__(self, string1: str, string2: str):
          self.string1 = string1
          self.string2 = string2
  
      def is_equal(self) -> bool:
          return self.string1 == self.string2
  
      def is_different(self) -> bool:
          return self.string1 != self.string2
  
      def is_similar(self, threshold: float = 0.5) -> bool:
          distance = edit_distance(self.string1, self.string2)
          max_length = max(len(self.string1), len(self.string2))
  
          return distance / max_length < threshold
  
  # Example Usage:
  # >>> comparator = StringComparator("apple", "apples")
  # >>> comparator.is_equal()
  # False
  # >>> comparator.is_different()
  # True
  # >>> comparator.is_similar(threshold=0.3)
  # True
  
output:     def edit_distance(str1: str, str2: str) -> int:
          if len(str1) < len(str2):
              return self.edit_distance(str2, str1)
  
          if len(str2) == 0:
              return len(str1)
  
          previous_row = range(len(str2) + 1)
          for i, c1 in enumerate(str1):
              current_row = [i + 1]
              for j, c2 in enumerate(str2):
                  insertions = previous_row[j + 1] + 1
                  deletions = current_row[j] + 1
                  substitutions = previous_row[j] + (c1 != c2)
                  current_row.append(min(insertions, deletions, substitutions))
              previous_row = current_row
  
          return previous_row[-1]