input: Write a function to find the longest common subsequence (LCS) of two given strings. The function should return the LCS as a string. If either of the strings is empty, the function should return an empty string.
  def find_lcs(x, y):
      m = len(x)
      n = len(y)
      lcs = [[0 for _ in range(n+1)] for _ in range(m+1)]
      for i in range(m+1):
          for j in range(n+1):
              if i == 0 or j == 0:
                  lcs[i][j] = 0
              elif x[i-1] == y[j-1]:
                  lcs[i][j] = lcs[i-1][j-1] + 1
              else:
                  lcs[i][j] = max(lcs[i-1][j], lcs[i][j-1])
      index = lcs[m][n]
      lcs_str = [""] * (index+1)
      lcs_str[index] = ""
      i = m
      j = n
      while i > 0 and j > 0:
          if x[i-1] == y[j-1]:
              lcs_str[index-1] = x[i-1]
              i-=1
              j-=1
              index-=1
          elif lcs[i-1][j] > lcs[i][j-1]:
              i-=1
          else:
              j-=1
      return "".join(lcs_str[:-1])
  assert find_lcs("abcdaf", "acbcf")=="abcf"
  assert find_lcs("abc", "def")==""
  assert find_lcs("", "acbcf")==""
  assert find_lcs("abcdaf", "")==""
  assert find_lcs("abcdef", "abcxxdef")=="abcdef"
output: def find_lcs(x, y):
      m = len(x)
      n = len(y)
      lcs = [[0 for _ in range(n+1)] for _ in range(m+1)]
      for i in range(m+1):
          for j in range(n+1):
              if i == 0 or j == 0:
                  lcs[i][j] = 0
              elif x[i-1] == y[j-1]:
                  lcs[i][j] = lcs[i-1][j-1] + 1
              else:
                  lcs[i][j] = max(lcs[i-1][j], lcs[i][j-1])
      index = lcs[m][n]
      lcs_str = [""] * (index+1)
      lcs_str[index] = ""
      i = m
      j = n
      while i > 0 and j > 0:
          if x[i-1] == y[j-1]:
              lcs_str[index-1] = x[i-1]
              i-=1
              j-=1
              index-=1
          elif lcs[i-1][j] > lcs[i][j-1]:
              i-=1
          else:
              j-=1
      return "".join(lcs_str[:-1])