Разворот строки - разбор алгоритимической задачи
Primary tabs
Forums:
Задача:
У есть строка, например "Привет!" требуется развернуть символы в ней в обратном порядке, чтобы получились "!тевирП"
В отличии от многих алгорических задач, требование тут: оптимизировать потребление памяти (т.е. не создавать еще одну строку, куда просто переписаывать символы в обратном порядке
Решение
Общая идея:
- Поставить один указатель (left) на начало строки, другой (right) — на конец.
- Менять местами символы на позициях left и right.
- Сдвигать left вправо, right влево, пока они не встретятся.
Возможная реализация в коде (golang)
package main
import "fmt"
func reverseString(s string) string {
// Преобразуем строку в срез рун для корректной работы с Unicode
runes := []rune(s)
n := len(runes)
// Меняем местами символы с начала и конца, двигаясь к центру
for i := 0; i < n/2; i++ {
runes[i], runes[n-1-i] = runes[n-1-i], runes[i]
}
return string(runes)
}
func main() {
fmt.Println(reverseString("Привет!")) // Вывод: "olleh"
fmt.Println(reverseString("Golang")) // Вывод: "oG"
fmt.Println(reverseString("")) // Пустая строка: ""
}
-- замечание по синтаксису golang-а: в этом решении мы используем преобразование строки к срезу рун, чтобы проводить обмен символов в строке, а затема финально опять преобразуем результат к строковому типу.
- Log in to post comments
- 120 reads
vedro-compota
Thu, 04/23/2026 - 21:28
Permalink
уточнить реализацию - как тут
уточнить реализацию - как тут происходит обмен без затирания значения
_____________
матфак вгу и остальная классика =)