import Foundation
func splitAndKeep(_ text: String, delims: Set<Character>) -> [String] {
guard !text.isEmpty else { return [] }
let chars = Array(text)
var result: [String] = []
var start = 0
for i in 1..<chars.count {
let prev = chars[i - 1]
let curr = chars[i]
let prevIsDelim = delims.contains(prev)
let currIsDelim = delims.contains(curr)
let shouldSplit =
(prevIsDelim != currIsDelim) || // text ↔ delim
(prevIsDelim && currIsDelim && prev != curr) // delim type changed
if shouldSplit {
result.append(String(chars[start..<i]))
start = i
}
}
// Add final segment
result.append(String(chars[start...]))
return result
}
let s = "aa==bbb---cccc++++ddddd"
let delimiters: Set<Character> = ["=", "-", "+"]
print(splitAndKeep(s, delims: delimiters))
/*
run:
["aa", "==", "bbb", "---", "cccc", "++++", "ddddd"]
*/