# Mnemonist

## Suffix Array

A suffix array is the array of a string’s possible suffixes stored in lexicographical order.

For instance, the string `banana`

has the following suffixes:

```
banana
anana
nana
ana
na
a
```

So, in lexicographical order, the suffixes would be stored likewise:

```
a
ana
anana
banana
na
nana
```

Which is encoded by the following array if we refer to each suffix by its starting index:

```
[5, 3, 1, 0, 4, 2]
```

But the real purpose of mnemonist’s `SuffixArray`

class is that it uses *Karkkainen* and *Sanders*’ algorithm to build the array in linear time, whereas a naive implementation would do it in quadratic time.

For more information about the Suffix Array, you can head here.

```
const SuffixArray = require('mnemonist/suffix-array');
```

## Constructor

The `SuffixArray`

class simply takes a single string or arbitrary array of string tokens as its only argument:

```
const suffixArray = new SuffixArray('banana');
```

```
// Also works with arbitrary sequences of tokens
const suffixArray = new SuffixArray(['the', 'cat', 'eats', 'the', 'mouse']);
```

Note that if you pass an arbitrary array of tokens, computation time for the suffix array is approximately `O(n log n)`

, which is obviously slower than for a simple string.

## Members

### #.array

The computed suffix array.

```
const suffixArray = new SuffixArray('banana');
suffixArray.array
>>> [5, 3, 1, 0, 4, 2]
```

### #.length

The length of the array.

```
const suffixArray = new SuffixArray('banana');
suffixArray.length
>>> 6
```

### #.string

The stored string.

```
const suffixArray = new SuffixArray('banana');
suffixArray.string
>>> 'banana'
```