11. Вывести каждый второй символ строки в обратном порядке
Условие задачи:
Дана строка.
Необходимо с помощью Stream API:
обходить строку в обратном порядке;
брать каждый второй символ, начиная с последнего;
не использовать
reverse();не создавать дополнительные внешние структуры данных;
выполнить обработку одним stream-конвейером.
Код:
String s = "Spring Boot!";
Спойлеры к решению
Подсказки
💡 Начни с последнего индекса строки и двигайся назад с шагом
2.💡 По индексу получай символ через
charAt().💡 Для формирования результата используй
Collectors.joining().Решение
Вариант для Java 9+:
String result = IntStream.iterate(
s.length() - 1,
i -> i >= 0,
i -> i - 2
)
.mapToObj(i -> String.valueOf(s.charAt(i)))
.collect(Collectors.joining());
System.out.println(result);
Для строки:
Spring Boot!
индексы будут обходиться так:
11, 9, 7, 5, 3, 1
Поэтому результат:
!oBgip
Здесь строка физически не разворачивается. Stream сразу идёт с конца строки с шагом 2.
Если нужна совместимость с Java 8, можно использовать IntStream.range():
String result = IntStream.range(0, s.length() / 2)
.map(i -> s.length() - 1 - i * 2)
.mapToObj(i -> String.valueOf(s.charAt(i)))
.collect(Collectors.joining());
Временная сложность — O(n), дополнительная память помимо результирующей строки — O(1).
Важно: здесь под «каждым вторым» понимаются последний символ, затем через один, то есть позиции 1, 3, 5... в уже развёрнутой последовательности. Если требуется именно второй, четвёртый, шестой символ развёрнутой строки, стартовый индекс нужно сместить на один.