Я пытаюсь решить проблему следующего палиндрома из Sphere Online Judge (SPOJ), где мне нужно найти палиндром с целым числом до миллиона цифр. Я думал об использовании функций Java для реверсирования строк, но позволят ли они, чтобы строка была такой длинной?
157
Ответы:
Вы должны быть в состоянии получить строку длины
Integer.MAX_VALUE
всегда 2 147 483 647 (2 31 - 1)(определяется спецификацией Java, максимальный размер массива, который класс String использует для внутреннего хранения)
ИЛИ
Half your maximum heap size
(поскольку каждый символ составляет два байта), в зависимости от того, что меньше .источник
Я полагаю, что они могут содержать до 2 ^ 31-1 символов, поскольку они хранятся во внутреннем массиве, а массивы индексируются целыми числами в Java.
источник
getBytes
и подобное может иметь проблемы, если вы попытаетесь использовать очень большую строку.Хотя теоретически вы можете использовать символы Integer.MAX_VALUE, JVM ограничена размером используемого массива.
на Oracle Java 8 обновление 92 отпечатков
Примечание: в Java 9 Strings будет использовать byte [], что будет означать, что многобайтовые символы будут использовать более одного байта и дополнительно уменьшать максимум. Если у вас есть все четыре байтовых кода, например, эмодзи, вы получите только около 500 миллионов символов
источник
Рассматривали ли вы использовать
BigDecimal
вместо того,String
чтобы держать свои номера?источник
Integer.MAX_VALUE - это максимальный размер строки + зависит от объема вашей памяти, но проблема в сфере онлайн судить, вам не нужно использовать эти функции
источник
Java9 использует byte [] для хранения String.value, поэтому вы можете получить только около 1 Гб строк в Java9. Java8, с другой стороны, может иметь строки 2 ГБ.
Под символом я подразумеваю «символы», некоторые символы не могут быть представлены в BMP (например, некоторые смайлики), поэтому потребуется больше (в настоящее время 2) символов.
источник
Куча часть становится хуже, друзья мои. UTF-16 не может быть ограничен 16 битами и может расширяться до 32
источник
char
тип Java точно равен 16 битам, поэтому количество битов, используемых UTF-16, не имеет значения ...