Способ 1 — цикл с конкатенацией:
def reverse(s: str) -> str:
result = ""
for ch in s:
result = ch + result # каждый новый символ ставим в начало
return result
print(reverse("Привет")) # "тевирП"
Способ 2 — через reversed() и join:
def reverse(s: str) -> str:
return "".join(reversed(s))
Способ 3 — двумя указателями (на списке):
def reverse(s: str) -> str:
chars = list(s)
i, j = 0, len(chars) - 1
while i < j:
chars[i], chars[j] = chars[j], chars[i]
i += 1
j -= 1
return "".join(chars)
Первый способ имеет сложность $O(n^2)$ из-за пересоздания строк, второй и третий — $O(n)$.