Have a solution but need to optimize
func reverse(stringWithIgnoreSymbols: String, ignoreSymbols: String) -> String {
let words = stringWithIgnoreSymbols.components(separatedBy: " ")
var wordsPositions: [[String:[Int]]] = []
for (index, word) in words.enumerated() {
wordsPositions.append([:])
for ignoredCharacter in ignoreSymbols {
for (indx, words) in word.enumerated() {
if words == ignoredCharacter {
if wordsPositions[index][String(ignoredCharacter)] == nil {
wordsPositions[index][String(ignoredCharacter)] = [indx]
} else {
wordsPositions[index][String(ignoredCharacter)]!.append(indx)
}
}
}
}
}
var newTextArray = words
for (i, _) in words.enumerated() {
for ignoredCharacter in ignoreSymbols {
newTextArray[i] = newTextArray[i].replacingOccurrences(of: String(ignoredCharacter), with: "")
}
}
newTextArray = newTextArray.map() { String($0.reversed()) }
for i in 0..<words.count {
var orderedArray = [(Int, String)] ()
for toRestore in wordsPositions[i] {
for item in toRestore.value {
orderedArray.append((item, toRestore.key))
}
orderedArray = orderedArray.sorted() { $0.0 < $1.0 }
}
for (index, str) in orderedArray {
let posIndex = newTextArray[i].index(newTextArray[i].startIndex, offsetBy: index)
let char = str[0]
newTextArray[i].insert(char, at: posIndex)
}
}
return newTextArray.joined(separator: " ")
}
private extension StringProtocol {
subscript(offset: Int) -> Character {
self[index(startIndex, offsetBy: offset)]
}
}
Topic:
Programming Languages
SubTopic:
Swift
Tags: