Ich versuche das Next Palindrome- Problem von Sphere Online Judge (SPOJ), bei dem ich ein Palindrom für eine ganze Zahl von bis zu einer Million Stellen finden muss. Ich habe darüber nachgedacht, Javas Funktionen zum Umkehren von Strings zu verwenden, aber würden sie zulassen, dass ein String so lang ist?
157
Antworten:
Sie sollten in der Lage sein, einen String mit einer Länge zu erhalten
Integer.MAX_VALUE
immer 2.147.483.647 (2 31 - 1)(Definiert durch die Java-Spezifikation die maximale Größe eines Arrays, die die String-Klasse für den internen Speicher verwendet)
ODER
Half your maximum heap size
(da jedes Zeichen zwei Bytes hat) je nachdem, welcher Wert kleiner ist .quelle
Ich glaube, sie können bis zu 2 ^ 31-1 Zeichen enthalten, da sie von einem internen Array gehalten werden und Arrays in Java durch Ganzzahlen indiziert werden.
quelle
getBytes
und ähnliches kann Probleme haben, wenn Sie versuchen, eine sehr große Zeichenfolge zu verwenden.Während Sie theoretisch Integer.MAX_VALUE-Zeichen verwenden können, ist die JVM in der Größe des Arrays begrenzt, das sie verwenden kann.
unter Oracle Java 8 Update 92 druckt
Hinweis: In Java 9 verwenden Strings Byte [], was bedeutet, dass Mehrbytezeichen mehr als ein Byte verwenden und das Maximum weiter reduzieren. Wenn Sie alle vier Byte-Codepunkte haben, z. B. Emojis, erhalten Sie nur etwa 500 Millionen Zeichen
quelle
Haben Sie darüber nachgedacht , Ihre Nummern zu verwenden,
BigDecimal
anstatt sieString
zu halten?quelle
Integer.MAX_VALUE ist die maximale Größe des Strings + hängt von Ihrer Speichergröße ab, aber das Problem bei der Online-Beurteilung von Sphere ist, dass Sie diese Funktionen nicht verwenden müssen
quelle
Java9 verwendet byte [] zum Speichern von String.value, sodass Sie in Java9 nur etwa 1 GB Strings erhalten können. Java8 kann dagegen 2 GB Strings haben.
Mit Zeichen meine ich "Zeichen", einige Zeichen sind in BMP nicht darstellbar (wie einige der Emojis), daher werden mehr (derzeit 2) Zeichen benötigt.
quelle
Der Haufen wird schlimmer, meine Freunde. UTF-16 ist nicht auf 16 Bit beschränkt und kann auf 32 erweitert werden
quelle
char
Typ genau 16 Bit ist, spielt die Anzahl der von UTF-16 verwendeten Bits keine Rolle ...