input: Write a function to determine the minimum number of operations required to transform one string into another using dynamic programming, specifically by calculating the edit distance. The input to the function will be two strings, and the output will be the minimum number of insertions, deletions, or substitutions required to change one string into the other.
  assert edit_distance("kitten", "sitting")==3
  assert edit_distance("flaw", "lawn")==2
  assert edit_distance("rosettacode", "raisethysword")==8
  assert edit_distance("", "empty")==5
  assert edit_distance("equal", "equal")==0
output: def edit_distance(str1, str2):
      m, n = len(str1), len(str2)
      dp = [[0] * (n + 1) for _ in range(m + 1)]
      
      for i in range(m + 1):
          for j in range(n + 1):
              if i == 0:
                  dp[i][j] = j
              elif j == 0:
                  dp[i][j] = i
              elif str1[i - 1] == str2[j - 1]:
                  dp[i][j] = dp[i - 1][j - 1]
              else:
                  dp[i][j] = 1 + min(dp[i - 1][j], dp[i][j - 1], dp[i - 1][j - 1])
      
      return dp[m][n]