human: 写一个函数来找到两个字符串的最长公共子串。
 bot: 为了找到两个字符串的最长公共子串，我们可以使用动态规划的方法。我们可以创建一个二维数组，其中dp[i][j]表示以第一个字符串的第i个字符和第二个字符串的第j个字符结尾的最长公共子串的长度。然后，我们可以使用一个循环来遍历两个字符串的所有字符，并根据当前字符是否相等来更新dp数组的值。具体来说，如果第一个字符串的第i个字符和第二个字符串的第j个字符相等，那么dp[i][j]的值可以通过dp[i-1][j-1]加1得到。否则，dp[i][j]的值为0。最后，我们可以遍历dp数组，找到其中的最大值，即为最长公共子串的长度。然后，我们可以根据最长公共子串的长度和dp数组的值，来构造最长公共子串。