Skip to content

Commit 8379f21

Browse files
author
uwi
committed
'int[]版suffix arrayの座標圧縮を高速化'
1 parent 0123f59 commit 8379f21

1 file changed

Lines changed: 13 additions & 13 deletions

File tree

‎StringAlgorithm/StringAlgorithm.java‎

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import java.util.stream.IntStream;
1+
import java.util.Arrays;
22

33
class StringAlgorithm {
44
private static int[] saNaive(int[] s) {
@@ -228,22 +228,22 @@ public static int[] suffixArray(int[] s, int upper) {
228228
return sais(s, upper);
229229
}
230230

231-
public static int[] suffixArray(int[] s) {
231+
public static int[] suffixArray(int[] s)
232+
{
232233
int n = s.length;
233-
Integer[] idx = new Integer[n];
234-
for (int i = 0; i < n; i++) {
235-
idx[i] = i;
234+
int[] vals = Arrays.copyOf(s, n);
235+
java.util.Arrays.sort(vals);
236+
int p = 1;
237+
for(int i = 1;i < n;i++){
238+
if(vals[i] != vals[i-1]){
239+
vals[p++] = vals[i];
240+
}
236241
}
237-
java.util.Arrays.sort(idx, (l, r) -> s[l] - s[r]);
238242
int[] s2 = new int[n];
239-
int now = 0;
240-
for (int i = 0; i < n; i++) {
241-
if (i > 0 && s[idx[i - 1]] != s[idx[i]]) {
242-
now++;
243-
}
244-
s2[idx[i]] = now;
243+
for(int i = 0;i < n;i++){
244+
s2[i] = java.util.Arrays.binarySearch(vals, 0, p, s[i]);
245245
}
246-
return sais(s2, now);
246+
return sais(s2, p);
247247
}
248248

249249
public static int[] suffixArray(char[] s) {

0 commit comments

Comments
 (0)