Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save mathonsunday/111748368469ab3acff0bd77bef923c8 to your computer and use it in GitHub Desktop.
Save mathonsunday/111748368469ab3acff0bd77bef923c8 to your computer and use it in GitHub Desktop.
func reverse(_ str: inout String) {
if str.isEmpty {
return
}
var leftPointer = str.startIndex
var rightPointer = str.index(before: str.endIndex)
while leftPointer < rightPointer {
let leftChar = str[leftPointer]
str.replaceSubrange(leftPointer..<str.index(after: leftPointer), with: String(str[rightPointer]))
str.replaceSubrange(rightPointer..<str.index(after: rightPointer), with: String(leftChar))
if leftPointer < str.endIndex {
leftPointer = str.index(after: leftPointer)
}
if rightPointer > str.startIndex {
rightPointer = str.index(before: rightPointer)
}
}
}
@bmalbuck
Copy link

// NICE WORK!

// I made it a String extension with a mutating func

extension String {
    mutating func reverseInline() {
        if self.isEmpty {
            return
        }
        var leftPointer = self.startIndex
        var rightPointer = self.index(before: self.endIndex)
        while leftPointer < rightPointer {
            let leftChar = self[leftPointer]
            self.replaceSubrange(leftPointer..<self.index(after: leftPointer), with: String(self[rightPointer]))
            self.replaceSubrange(rightPointer..<self.index(after: rightPointer), with: String(leftChar))
            if leftPointer < self.endIndex {
                leftPointer = self.index(after: leftPointer)
            }
            if rightPointer > self.startIndex {
                rightPointer = self.index(before: rightPointer)
            }
        }
    }
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment