class StringReverser:
def reverse_in_place(self, s: list[str]) -> None:
left, right = 0, len(s) - 1
while left < right:
s[left], s[right] = s[right], s[left] # swap characters
left += 1 # move left pointer right
right -= 1 # move right pointer left
def reverse_new_string(self, s: str) -> str:
result = []
for i in range(len(s) - 1, -1, -1):
result.append(s[i]) # add characters from end to start
return ''.join(result)
if __name__ == '__main__':
original = 'hello'
# Approach 1: In-place reversal using list
s_list = list(original)
reverser = StringReverser()
reverser.reverse_in_place(s_list)
print(''.join(s_list))
# Approach 2: Create new reversed string
reversed_str = reverser.reverse_new_string(original)
print(reversed_str)loop until pointers meet or cross to reverse all pairs
s[left], s[right] = s[right], s[left] # swap characters
swap characters at left and right pointers
left += 1 # move left pointer right
advance left pointer inward
right -= 1 # move right pointer left
advance right pointer inward
for i in range(len(s) - 1, -1, -1):
iterate string indices backward to build reversed string
result.append(s[i]) # add characters from end to start
append characters in reverse order