我正在尝试Sphere Online Judge(SPOJ)的Next Palindrome问题,我需要找到一个高达一百万位整数的回文.我想过使用Java的函数来反转字符串,但它们是否允许String这么长?
Bil*_*ard 230
您应该能够获得长度为Integer.MAX_VALUE的字符串(Java规范始终为2147483647(2 31 - 1),数组的最大大小(String类用于内部存储)或最大堆大小的一半(因为每个字符是两个字节),以较小者为准.
Pet*_*rey 14
虽然理论上可以使用Integer.MAX_VALUE字符,但JVM的大小可以限制在它可以使用的数组中.
public static void main(String... args) {
for (int i = 0; i < 4; i++) {
int len = Integer.MAX_VALUE - i;
try {
char[] ch = new char[len];
System.out.println("len: " + len + " OK");
} catch (Error e) {
System.out.println("len: " + len + " " + e);
}
}
}
Run Code Online (Sandbox Code Playgroud)
在Oracle Java 8更新92打印
len: 2147483647 java.lang.OutOfMemoryError: Requested array size exceeds VM limit
len: 2147483646 java.lang.OutOfMemoryError: Requested array size exceeds VM limit
len: 2147483645 OK
len: 2147483644 OK
Run Code Online (Sandbox Code Playgroud)
注意:在Java 9中,字符串将使用byte [],这意味着多字节字符将使用多个字节并进一步降低最大值.如果你有所有四个字节的代码点,例如emojis,你将只获得大约5亿个字符
| 归档时间: |
|
| 查看次数: |
286356 次 |
| 最近记录: |