Second example
final class ExceptionRuleReverseManager {
var exceptionElements = String()
func reverse(string: String) -> String {
let words = string.components(separatedBy: " ")
var result = [String]()
for word in words {
result.append(rearrangeWord(word))
}
return String(result.joined(separator: " "))
}
private func rearrangeWord(_ word: String) -> String {
var arrayOfCharacters = Array(word)
if var firstElementIndex = arrayOfCharacters.indices.first,
var secondElementIndex = arrayOfCharacters.indices.last {
while firstElementIndex < secondElementIndex {
if isException(element: word[firstElementIndex]) {
// If first element is exception - skip it
firstElementIndex += 1
// If second element is exception - skip it
} else if isException(element: word[secondElementIndex]) {
secondElementIndex -= 1
} else {
// If both elements are not exceptions - swap them
arrayOfCharacters.swapAt(firstElementIndex, secondElementIndex)
firstElementIndex += 1
secondElementIndex -= 1
}
}
}
return String(arrayOfCharacters)
}
private func isException(element: String.Element) -> Bool {
return exceptionElements.contains(element)
}
}
extension String {
subscript (index: Int) -> String.Element {
let stringIndex = self.index(self.startIndex, offsetBy: index)
return self[stringIndex]
}
}
var ReverseManager = ExceptionRuleReverseManager()
ReverseManager.exceptionElements = "A2"
var input = "Alloha 234"
var result = ReverseManager.reverse(string: input)
print(result)
// result = Aaholl 243
ReverseManager.exceptionElements = "4B"
input = "Ball4 456"
result = ReverseManager.reverse(string: input)
// result = Blla4 465
Topic:
Programming Languages
SubTopic:
Swift
Tags: