拼接字符串删除重复部分

函数 main() 接收两个任意长度的 字符串s1和s2 ,要求把这两个字符串先后拼接起来成为一个长字符串,在拼接时 删除s1尾部与 s2头部 最长的公共字串,重叠部分只保留一份,最后返回拼接结果字符串.
例如,参数分别为 'abcdefg' 和 'fghik'时返回 'abcdefghik'.
(不引用第三方库)
(感觉至少有3种解法)
倒序法:

img

集合去重法:

img

可以使用如下代码实现要求的功能:

def main(s1,s2):
    if len(s1) > len(s2):
        s1_ = s1[len(s1)-len(s2):]
        s2_ = s2
    elif len(s1) < len(s2):
        s2_ = s2[:len(s1)]
        s1_ = s1
    else:
        s1_ = s1
        s2_ = s2
    for i in range(1,len(s1)+1):
        if s1_[len(s1_) - i:] == s2_[:i]:
            delete = s2_[:i]
    s2 = s2.replace(delete,'',1)
    return s1 + s2

答题版效果图:

img

当然了,如果抛开题目,您也可以使用下面优化过的的函数组:

class Solution:
    def main(s1:str,s2:str):
        delete = None
        if len(s1) > len(s2):
            s1_ = s1[len(s1)-len(s2):]
            s2_ = s2
        elif len(s1) < len(s2):
            s2_ = s2[:len(s1)]
            s1_ = s1
        else:
            s1_ = s1
            s2_ = s2
        for i in range(1,len(s1)+1):
            if s1_[len(s1_) - i:] == s2_[:i]:
                delete = s2_[:i]
        if delete == None:
            return '两字符串无公共部分。'
        s2 = s2.replace(delete,'',1)
        return s1 + s2
def inter():
    s1 = input('输入字符串1:')
    s2 = input('输入字符串2:')
    result = Solution.main(s1,s2)
    print('结果是:',result,'\n')
while True:
    inter()

实用版效果图:

img

1.range里必须是个数字,不能是str,要这样:range(int(str1))
2.set是无序的,不要把字符串转set,你再也转不回来了
3.你可以用正则匹配,或者循环切片匹配,或者按位匹配,方法不止3种


def main(s1, s2):
    i = len(s1) - 1
    j = 0
    while i >= 0 and j < len(s2) and s1[i] == s2[j]:
        i -= 1
        j += 1
    return s1[:i+1] + s2