我正在寻找一种在Java中创建后缀数组的方法。
我找到了两种可能的变体。而且我想更加深入地了解这些变体之间的不同之处。
包括运行时间
和空间
。
代码(后缀):
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;
}
代码(StringBuilder后缀):
public static String[] suffixes(String s)
{
int N = s.length();
StringBuilder sb = new StringBuilder(s);
String[] suffixes = new String[N];
for (int i = 0; i < N; i++)
suffixes[i] = sb.substring(i, N);
return suffixes;
}
问题:
- 如何高效地生成后缀数组?
substring
的性能。无论哪种方式,它们的功能几乎相同。(事实上,在旧版本的Java中使用StringBuilder可能稍微慢一些,不包括创建StringBuilder对象本身的开销。) - Hot Licks