PTA习题-python 7-10 公共子串查找

最长公共子串查找。子串指原字符串中的一段连续的字符。

输入格式:

分行输入两个字符串,求两个字符串共有的最长子串。

输出格式:

输出公共子串。

输入样例:

在这里给出一组输入。例如:

Hefei Normal University
Anhui Hefei

输出样例:

在这里给出相应的输出。例如:

Hefei

思路分析

1、选出短的字串,用短的去匹配长的

2、从短串第一个开始逐一匹配长串(双重循环),遇到第一个相同串则存下来,记住位置,再循环匹配两者的下一个串是否相同(前提:判断两者都不是最后一个位置的串,否则break),相同则存下来,否则就断了,则break

3、每一次得到的共同子串都和前一个比较长度,长则替换

代码实现


str1=input()
str2=input()
# 选出短的那条,用短的去匹配长的
str_short,str_long= (list(str2),list(str1)) if len(str1)>len(str2) else (list(str1),list(str2))

s1 = ''
for i in range(len(str_short)):
    for k in range(len(str_long)):
        s2 =''  # 每次匹配都要清空s2
        y = k   # 记住此时k的值,以便后面找到相同串时,顺序匹配下一个串是否相同
        if str_short[i] == str_long[k]: #找到第一个相同的串,先记住
            s2 = s2 + str_short[i]
            for x in range(i,len(str_short)): #再找下一个是否相同
                if x!= len(str_short)-1 and y!= len(str_long)-1: # 先判断都不是最后一个位置的串
                    if str_short[x+1]==str_long[y+1]: # 相同则存起来
                        s2 = s2 + str_short[x+1]
                        y = y + 1  # 继续匹配下一个
                    else : # 否则就是不同,跳出
                        break
                else:
                    break
            if len(s2)>len(s1): # 如果后面得到的共同子串比前面的长,则替换
                s1 = s2
print(s1)

提交结果

猜你喜欢

转载自blog.csdn.net/weixin_58707437/article/details/128083061