函数 main() 接收两个任意长度的 字符串s1和s2 ,要求把这两个字符串先后拼接起来成为一个长字符串,在拼接时 删除s1尾部与 s2头部 最长的公共字串,重叠部分只保留一份,最后返回拼接结果字符串.
例如,参数分别为 'abcdefg' 和 'fghik'时返回 'abcdefghik'.
(不引用第三方库)
(感觉至少有3种解法)
倒序法:
集合去重法:
可以使用如下代码实现要求的功能:
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
答题版效果图:
当然了,如果抛开题目,您也可以使用下面优化过的的函数组:
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()
实用版效果图:
1.谢谢大佬,真的是手把手教了,而且还拓展了。
2.软件上运行提示第13行语法错误,不过IDLE上运行出来是正确的。
3.replace()里面为什么要放 1 呢?