def repeat(w,n):
skip = next((i for i in range(len(w)-1,0,-1) if w[:i]==w[-i:]),0)
return w + (n-1)*w[skip:]
print(repeat("amanha",2)) # amanhamanha
print(repeat("abc",2)) # abcabc
print(repeat("abcdab",2)) # abcdabcdab
您还可以使用max()函数获取要跳过的长度(效率不如next(),但写入的长度更短):
def repeat(w,n):
skip = max(range(len(w)),key=lambda i:i*(w[:i]==w[-i:]))
return w + (n-1)*w[skip:]
第一步是确定单词开头和结尾之间的最长重叠。next()函数可用于获取要跳过的字符数,方法是获取从最长子字符串到最短子字符串的第一个匹配,如果没有重叠,则默认为零。然后可以在单词的剩余部分执行重复(即跳过公共部分的长度)
您还可以使用max()函数获取要跳过的长度(效率不如next(),但写入的长度更短):
相关问题 更多 >
编程相关推荐