Monica_MTF 2023-01-17 14:25 采纳率: 73.9%
浏览 50
已结题

拼接字符串删除重复部分

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

img

集合去重法:

img

  • 写回答

3条回答 默认 最新

  • starlight_2007 2023-01-17 16:07
    关注

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

    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

    展开全部

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
    Monica_MTF 2023-01-19 08:16

    1.谢谢大佬,真的是手把手教了,而且还拓展了。
    2.软件上运行提示第13行语法错误,不过IDLE上运行出来是正确的。
    3.replace()里面为什么要放 1 呢?

    回复
    starlight_2007 回复 Monica_MTF 2023-01-19 10:00

    本情景中,replace()放不放1都可以。

    回复
查看更多回答(2条)
编辑
预览

报告相同问题?

问题事件

  • 系统已结题 1月26日
  • 已采纳回答 1月19日
  • 创建了问题 1月17日
手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部