input: Write a function to find the longest common substring in two strings. If there is no common substring return an empty string. If either of the strings is empty then return an empty string.
  assert longestCommonSubstring("abcdef", "zbcdf")=="bcd"
  assert longestCommonSubstring("hello", "helo")=="hel"
  assert longestCommonSubstring("apple", "pineapple")=="apple"
  assert longestCommonSubstring("", "hello")==""
  assert longestCommonSubstring("world", "")==""
output: def longestCommonSubstring(str1, str2):
      if not str1 or not str2:
          return ""
      m, n = len(str1), len(str2)
      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 str1[i - 1] == str2[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 str1[end_index - max_len:end_index]