Skip to content
Merged
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
'int[]版suffix arrayの座標圧縮を高速化'
  • Loading branch information
uwi
uwi committed Sep 20, 2020
commit 8379f2186c93ebf0b5bd605fe9fddecf6f1e9b9f
26 changes: 13 additions & 13 deletions StringAlgorithm/StringAlgorithm.java
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import java.util.stream.IntStream;
import java.util.Arrays;

class StringAlgorithm {
private static int[] saNaive(int[] s) {
Expand Down Expand Up @@ -228,22 +228,22 @@ public static int[] suffixArray(int[] s, int upper) {
return sais(s, upper);
}

public static int[] suffixArray(int[] s) {
public static int[] suffixArray(int[] s)
{
int n = s.length;
Integer[] idx = new Integer[n];
for (int i = 0; i < n; i++) {
idx[i] = i;
int[] vals = Arrays.copyOf(s, n);
java.util.Arrays.sort(vals);
int p = 1;
for(int i = 1;i < n;i++){
if(vals[i] != vals[i-1]){
vals[p++] = vals[i];
}
}
java.util.Arrays.sort(idx, (l, r) -> s[l] - s[r]);
int[] s2 = new int[n];
int now = 0;
for (int i = 0; i < n; i++) {
if (i > 0 && s[idx[i - 1]] != s[idx[i]]) {
now++;
}
s2[idx[i]] = now;
for(int i = 0;i < n;i++){
s2[i] = java.util.Arrays.binarySearch(vals, 0, p, s[i]);
}
return sais(s2, now);
return sais(s2, p);
}

public static int[] suffixArray(char[] s) {
Expand Down