Skip to content

Commit 6d4435d

Browse files
authored
Create suffixArray
1 parent b90da02 commit 6d4435d

File tree

1 file changed

+37
-0
lines changed

1 file changed

+37
-0
lines changed

Arrays/suffixArray

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
// Build a suffix array in O(n^2*log n);
2+
// kinda too much, but now you can search for a pattern in O(n*log n) where `n` is number of characters in `str`
3+
//
4+
function searchPattern(str) {
5+
var strLen = str.length;
6+
var suffixArray = new Array(strLen);
7+
var suffixes = new Array(strLen);
8+
9+
for (var i = strLen-1; i >= 0; i--) {
10+
suffixes[i] = [i, str.substr(i)];
11+
}
12+
13+
suffixes.sort(function(a, b) {
14+
return a[1] < b[1] ? -1 : 1;
15+
});
16+
17+
for (var i = 0; i < strLen; i++) {
18+
suffixArray[i] = suffixes[i][0];
19+
}
20+
21+
return function(pattern) {
22+
var l = 0;
23+
var r = strLen-1;
24+
while (l <= r) {
25+
var mid = (l + r) >> 1;
26+
var cmp = pattern.localeCompare( suffixes[suffixArray[mid]][1] );
27+
if (cmp === 0) {
28+
return mid;
29+
} else if (cmp > 0) {
30+
l = mid + 1;
31+
} else {
32+
r = mid - 1;
33+
}
34+
}
35+
return -1;
36+
}
37+
}

0 commit comments

Comments
 (0)