[英]How to build a suffix array in Java 7+ in linear space?
在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和更高版本中,有任何快速簡便的方法可以做到這一點嗎?
您當然可以發明一個抽象數據類型來表示“后綴數組”:
size()
get(int n)
-返回第n個元素 equals(int n, String s)
-比較第n個元素和輸入 根據您希望從該結構獲得的功能,可能有必要以不同的格式(例如,作為char[]
或什至兩者)存儲基礎String。 其實沒關系,它是實現細節,被封裝,對ADT用戶隱藏。 首先創建一個interface
並定義它需要支持的方法。
創建您自己的String(或后綴)類,如下所示
http://algs4.cs.princeton.edu/63suffix/SuffixArray.java.html
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.