input: Write a function to find the longest common subsequence between two given strings. If no common subsequence exists, return an empty string. The function should return the longest sequence of characters that appears in same order within both strings, but not necessarily consecutively.
  assert longest_common_subsequence("ABCDF", "ABECD")=="ABCD"
  assert longest_common_subsequence("AGGTAB", "GXTXAYB")=="GTAB"
  assert longest_common_subsequence("ABC", "DEF")==""
output: def longest_common_subsequence(str1, str2):
      m, n = len(str1), len(str2)
      dp = [[0] * (n + 1) for _ in range(m + 1)]
      
      for i in range(1, m + 1):
          for j in range(1, n + 1):
              if str1[i - 1] == str2[j - 1]:
                  dp[i][j] = dp[i - 1][j - 1] + 1
              else:
                  dp[i][j] = max(dp[i - 1][j], dp[i][j - 1])
      
      lcs_length = dp[m][n]
      lcs = [""] * (lcs_length + 1)
      lcs[lcs_length] = ""
      
      i, j = m, n
      while i > 0 and j > 0:
          if str1[i - 1] == str2[j - 1]:
              lcs[lcs_length - 1] = str1[i - 1]
              i -= 1
              j -= 1
              lcs_length -= 1
          elif dp[i - 1][j] > dp[i][j - 1]:
              i -= 1
          else:
              j -= 1
      
      return "".join(lcs)