input: Write a function to find the longest common substring between two given strings. The function should return the longest substring that appears in both strings. If there is no common substring, the function should return an empty string.
  assert longest_substring("abcdabcdabde", "defabcdabcd")=="abcdabcd"
  assert longest_substring("abcdef", "ghijkl")==""
  assert longest_substring("hello", "world")=="o"
  assert longest_substring("", "test")==""
  assert longest_substring("test", "")==""
output: def longest_substring(s1, s2):
      m, n = len(s1), len(s2)
      dp = [[0] * (n + 1) for _ in range(m + 1)]
      max_len = 0
      end_index = 0
      
      for i in range(1, m + 1):
          for j in range(1, n + 1):
              if s1[i - 1] == s2[j - 1]:
                  dp[i][j] = dp[i - 1][j - 1] + 1
                  if dp[i][j] > max_len:
                      max_len = dp[i][j]
                      end_index = i
      
      return s1[end_index - max_len:end_index]