Estou tentando o problema do próximo palíndromo do Sphere Online Judge (SPOJ), onde preciso encontrar um palíndromo para um número inteiro de até um milhão de dígitos. Pensei em usar as funções do Java para reverter as Strings, mas elas permitiriam que uma String demorasse tanto?
157
Respostas:
Você deve conseguir uma String de comprimento
Integer.MAX_VALUE
sempre 2.147.483.647 (2 31 - 1)(Definido pela especificação Java, o tamanho máximo de uma matriz, que a classe String usa para armazenamento interno)
OU
Half your maximum heap size
(já que cada caractere tem dois bytes), o que for menor .fonte
Eu acredito que eles podem ter até 2 ^ 31-1 caracteres, pois são mantidos por uma matriz interna e as matrizes são indexadas por números inteiros em Java.
fonte
getBytes
e similares podem ter problemas se você tentar uma string muito grande.Embora você possa, em teoria, caracteres Integer.MAX_VALUE, a JVM é limitada no tamanho da matriz que pode usar.
no Oracle Java 8, atualização 92, impressões
Nota: no Java 9, Strings usará byte [], o que significa que caracteres de vários bytes usarão mais de um byte e reduzirão ainda mais o máximo. Se você tiver todos os quatro pontos de código de bytes, por exemplo, emojis, você receberá apenas 500 milhões de caracteres
fonte
Você já pensou em usar seus números em
BigDecimal
vez deString
retê- los ?fonte
Integer.MAX_VALUE é o tamanho máximo da string + depende do tamanho da sua memória, mas no Problema do juiz on-line da esfera, você não precisa usar essas funções
fonte
O Java9 usa o byte [] para armazenar o String.value, portanto, você pode obter apenas 1 GB de Strings no Java9. Por outro lado, o Java8 pode ter cadeias de caracteres de 2 GB.
Por caractere, quero dizer "char" s, algum caractere não é representável no BMP (como alguns dos emojis); portanto, serão necessários mais (atualmente 2) caracteres.
fonte
A parte da pilha piora, meus amigos. Não é garantido que o UTF-16 seja limitado a 16 bits e pode ser expandido para 32
fonte
char
tipo é de 16 bits exatamente, por isso o número de bits UTF-16 usa realmente não importa ...