def remove_last_n(s: str, sub: str, n: int) -> str:
positions = []
start = 0
# Find all occurrences
while True:
pos = s.find(sub, start)
if pos == -1:
break
positions.append(pos)
start = pos + len(sub)
# Remove from the end
s_list = list(s)
for pos in reversed(positions):
if n == 0:
break
del s_list[pos:pos + len(sub)]
n -= 1
return "".join(s_list)
def remove_extra_spaces(s: str) -> str:
# Split on any whitespace, rejoin with single spaces
return " ".join(s.split())
text = "abc xyz xyz abc xyzabcxyz abc"
result = remove_last_n(text, "xyz", 3)
print(result)
cleaned = remove_extra_spaces(result)
print(cleaned)
'''
run:
abc xyz abc abc abc
abc xyz abc abc abc
'''