【发布时间】:2019-08-07 02:17:01
【问题描述】:
我正在编写这段代码,以应对 leet 代码的编码挑战。
这段代码适用于 987 个测试用例中的 986 个。对于非常长的字符串(长度 ~ 31600)的情况,它会失败。 子字符串函数抛出 java.lang.OutOfMemoryError: Java heap space。
我已尝试创建“子字符串” new SubString(s.substring(i,j)); 和 s.substring(i,j).intern();在看到其他堆栈溢出的建议之后。但徒劳无功
private static Map<String, Integer> findAllSubStrings(String s) {
Map<String, Integer> allSubStrings = new HashMap<>();
for(int i = 0; i<s.length(); i++) {
for(int j=i+1; j<=s.length(); j++) {
String substring = s.substring(i,j);
allSubStrings.put(substring, substring.length());
}
}
return allSubStrings;
}
例外是,
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at java.base/java.util.Arrays.copyOfRange(Arrays.java:4031)
at java.base/java.lang.StringLatin1.newString(StringLatin1.java:782)
at java.base/java.lang.String.substring(String.java:1888)
at main.LongestSubstring.findAllSubStrings(LongestSubstring.java:76)
at main.LongestSubstring.getLengthOfLongestSubString(LongestSubstring.java:44)
at main.LongestSubstring.main(LongestSubstring.java:38)
我正在寻找可以帮助我理解和解决此问题的人。
提前致谢。
【问题讨论】:
-
挑战是否明确要求您返回
Map<String, Integer>? -
没有。我使用地图来存储子字符串。对于这么大的字符串,这肯定不适用。