【发布时间】:2015-10-02 16:01:09
【问题描述】:
在 Pre-java 7 中,我可以简单地执行以下操作:
public static String[] suffixes(String s)
{
int N = s.length();
String[] suffixes = new String[N];
for (int i = 0; i < N; i++)
suffixes[i] = s.substring(i, N);
return suffixes;
}
但是,在 Java 7 中,substring 方法返回一个新字符串。所以占用的空间将是O(n^2),其中n是字符串的长度。
在 Java 7 及更高版本中是否有任何快速简便的方法可以做到这一点?
【问题讨论】:
-
不是
String。不。如果您使用了List<Character>,那么List.subList是底层List的视图。 -
一种方法是拥有我自己的 String 实现,它的行为类似于 Java 6 的实现,但我们肯定可以做得更好吧?
-
它...总是返回一个新的
String...如果您认为自己获得了更好的性能,因为事实并非如此,那您就大错特错了。跨度> -
@Makoto 是的。但是子字符串didn't copy the underlying data。这在 Java 7 中发生了变化,当时为
substring复制数据以避免大量String的非常短的子字符串导致内存问题。 -
@BoristheSpider 通过实现,我的意思是拥有自己的类来模仿字符串,使用 char 数组或委托给字符串私有 var。
标签: java algorithm suffix-array