input: Write a function to find the longest common subsequence between two strings. The function should return the longest subsequence that is common to both input strings. If there is no common subsequence, the function should return an empty string. If either of the input strings is empty, the function should return an empty string.
  assert longest_common_subsequence("ABCDF", "ABECD")=="ABCD"
  assert longest_common_subsequence("AGGTAB", "GXTXAYB")=="GTAB"
  assert longest_common_subsequence("ABCD", "EFGH")==""
  assert longest_common_subsequence("", "ABCD")==""
  assert longest_common_subsequence("ABCD", "")==""
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]
      if lcs_length == 0:
          return ""
      
      lcs = []
      i, j = m, n
      while i > 0 and j > 0:
          if str1[i - 1] == str2[j - 1]:
              lcs.append(str1[i - 1])
              i -= 1
              j -= 1
          elif dp[i - 1][j] > dp[i][j - 1]:
              i -= 1
          else:
              j -= 1
      
      return ''.join(reversed(lcs))