Estoy tratando el problema The Next Palindrome de Sphere Online Judge (SPOJ) donde necesito encontrar un palindrome para un número entero de hasta un millón de dígitos. Pensé en usar las funciones de Java para revertir cadenas, pero ¿permitirían que una cadena sea tan larga?
157
Respuestas:
Deberías poder obtener una cadena de longitud
Integer.MAX_VALUE
siempre 2.147.483.647 (2 31 - 1)(Definido por la especificación de Java, el tamaño máximo de una matriz, que la clase String usa para almacenamiento interno)
O
Half your maximum heap size
(ya que cada carácter tiene dos bytes) el que sea más pequeño .fuente
Creo que pueden tener hasta 2 ^ 31-1 caracteres, ya que están en una matriz interna, y las matrices están indexadas por enteros en Java.
fuente
getBytes
y similares pueden tener problemas si intenta una cadena muy grande.Si bien, en teoría, puede caracteres Integer.MAX_VALUE, la JVM está limitada en el tamaño de la matriz que puede usar.
en Oracle Java 8 actualización 92 impresiones
Nota: en Java 9, las cadenas utilizarán el byte [], lo que significa que los caracteres de varios bytes utilizarán más de un byte y reducirán aún más el máximo. Si tiene los cuatro puntos de código de byte, por ejemplo, emojis, solo obtendrá alrededor de 500 millones de caracteres
fuente
¿Has considerado usar en
BigDecimal
lugar deString
mantener tus números?fuente
Integer.MAX_VALUE es el tamaño máximo de la cadena + depende del tamaño de su memoria, pero el problema en el juez en línea de la esfera no tiene que usar esas funciones
fuente
Java9 usa el byte [] para almacenar String.value, por lo que solo puede obtener cadenas de 1GB en Java9. Java8 por otro lado puede tener cadenas de 2GB.
Por carácter quiero decir "char", algunos caracteres no son representables en BMP (como algunos de los emojis), por lo que tomará más (actualmente 2) caracteres.
fuente
La parte del montón empeora, mis amigos. No se garantiza que UTF-16 esté limitado a 16 bits y puede expandirse a 32
fuente
char
tipo de Java es exactamente de 16 bits, por lo que la cantidad de bits que UTF-16 usa realmente no importa ...