// Remove last n occurrences of a substring
fun removeLastNOccurrences(s: String, sub: String, n: Int): String {
val positions = mutableListOf<Int>()
var pos = s.indexOf(sub)
var offset: Int
// Find all occurrences
while (pos != -1) {
positions += pos
offset = pos + sub.length
pos = s.indexOf(sub, offset)
}
// Remove from the end
var result = s
var remaining = n
for (start in positions.asReversed()) {
if (remaining == 0) break
result = result.removeRange(start, start + sub.length)
remaining--
}
return result
}
// Remove extra spaces (collapse multiple spaces, trim ends)
fun removeExtraSpaces(s: String): String =
s.trim().split(Regex("\\s+")).joinToString(" ")
fun main() {
val text = "abc xyz xyz abc xyzabcxyz abc"
val result = removeLastNOccurrences(text, "xyz", 3)
println(result)
val cleaned = removeExtraSpaces(result)
println(cleaned)
}
/*
run:
abc xyz abc abc abc
abc xyz abc abc abc
*/