Есть ли в стандартных библиотеках Java какая-либо возможность, которая при наличии CharSequence производит обратное за O (1) время?
Полагаю, это "легко" реализовать, просто интересно, существует ли оно уже. (Я подозреваю, что причина, по которой это не предлагается, заключается в том, что «легкий» способ фактически сломал бы кодовые точки с несколькими символами - но во многих случаях мы знаем, что мы не имеем дело с ними).
Спасибо
Обновление
Хех, немного забавно, что большинство считает это «невозможным», хорошая работа, ребята! Ну, на самом деле это (концептуально) тривиально - псевдоява следует, чтобы прояснить:
class MyReverseString extends String { //of course I can't extend String!
final String delegate;
MyReverseString(String delegate) { this.delegate = delegate; }
int length() { return delegate.length(); }
int charAt(int i) { return delegate.charAt(delegate.length() - 1 - i); }
}
Я оставляю вопрос открытым еще для некоторых, только в том редком случае, когда что-то вроде очевидного решения (например, см. Решение Джона Скита) уже существует в JDK, и кто-то знает об этом. (Опять же, крайне маловероятно из-за этих неприятных кодов).
Редактировать Вероятно, путаница возникла из-за того, что в заголовке есть "строка" (но не строка!), Тогда как я прошу только "обратную последовательность CharSequence". Если вы были смущены, извините. Я надеялся, что часть O (1) точно прояснит, о чем идет речь.
И, кстати, этот вопрос заставил меня задать этот вопрос . (Это тот случай, когда было бы проще запустить регулярное выражение справа налево, а не слева направо, поэтому может быть какое-то практическое значение даже для реализации простых / неработающих кодовых точек)