input: Write a function to find the longest common substring in two given strings. The function should return the longest common substring found in both strings. If there are multiple longest common substrings, it should return the first one found.
  assert longestCommonSubstring("abcdef", "bcdf")=="bcd"
  assert longestCommonSubstring("hello", "world")=="l"
  assert longestCommonSubstring("python", "pygame")=="py"
  assert longestCommonSubstring("programming", "grammar")=="gram"
  assert longestCommonSubstring("a", "a")=="a"
output: def longestCommonSubstring(s1, s2):
      m, n = len(s1), len(s2)
      max_len = 0
      end_index = 0
      dp = [[0] * (n + 1) for _ in range(m + 1)]
      
      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]