从较短的字符串从头到尾遍历一遍即可:设置一个初始最大公共子串长度 max_length = 0,当遍历到s1[i]时,若s1[i:i+max_length+1] in s2,则最大公共子串长度可增加1,继并续判断直至不满足条件时,i 增加 1,即遍历到 i+1的位置,以此类推。由于仅需要输出较短字符串中最早出现的最长公共子串,因此 max_length 遇到更大的满足条件时才需更新,若后续遍历没有再比当前得到的 max_length 更长的子串,则无需更新,因此从较短的字符串从头到尾遍历一遍即可。

while True:
    try:
        s1 = input().strip()
        s2 = input().strip()
        if len(s1) > len(s2):
            s1,s2 = s2,s1
        res = ''
        max_length = 0
        i = 0
        while i + max_length < len(s1):
             while i+max_length < len(s1) and s1[i:i+max_length+1] in s2:
             #这里一定需要再判别一下i+max_length < len(s1),否则会出现无限循环的情况,测试用例不全所以才没有报错
                res = s1[i:i+max_length+1]
                max_length += 1
            i += 1
        print(res)
    except:
        break