def mergeOverlap(s1: str, s2: str) -> str:
# If either string is empty, return the other
if not s1:
return s2
if not s2:
return s1
# Find the largest suffix of s1 that is a prefix of s2
max_overlap = 0
max_len = min(len(s1), len(s2))
for i in range(1, max_len + 1):
if s1[-i:] == s2[:i]:
max_overlap = i
return s1 + s2[max_overlap:]
print("1", mergeOverlap("abc", "")) # abc
print("2", mergeOverlap("xyz", "abc")) # xyz abc
print("3", mergeOverlap("xab", "abc")) # xbc c
print("4", mergeOverlap("aababaab", "aab")) # aababaab
print("5", mergeOverlap("aabaaab", "aabc")) # aabaaab c
print("6", mergeOverlap("aabaaab", "bbc")) # aabaaab bbc
print("7", mergeOverlap("ababab", "ababc")) # ababab c
print("8", mergeOverlap("ababab", "babc")) # ababab c
print("9", mergeOverlap("abab", "aab")) # abab aab
'''
run:
1 abc
2 xyzabc
3 xabc
4 aababaab
5 aabaaabc
6 aabaaabbc
7 abababc
8 abababc
9 ababaab
'''