# Substring

(Redirected from Suffix (computer science))

A substring of a string $S$ is another string $S'$ that occurs "in" $S$. For example, "the best of" is a substring of "It was the best of times". This is not to be confused with subsequence, which is a generalization of substring. For example, "Itwastimes" is a subsequence of "It was the best of times", but not a substring.

Prefix and suffix are refinements of substring. A prefix of a string $S$ is a substring of $S$ that occurs at the beginning of $S$. A suffix of a string $S$ is a substring that occurs at the end of $S$.

## Substring

A substring (or factor) of a string $T = t_1 \dots t_n$ is a string $\hat T = t_{1+i} \dots t_{m+i}$, where $0 \leq i$ and $m + i \leq n$. A substring of a string is a prefix of a suffix of the string, and equivalently a suffix of a prefix. If $\hat T$ is a substring of $T$, it is also a subsequence, which is a more general concept. Given a pattern $P$, you can find its occurrences in a string $T$ with a string searching algorithm. Finding the longest string which is equal to a substring of two or more strings is known as the longest common substring problem.

Example: The string ana is equal to substrings (and subsequences) of banana at two different offsets:

banana
|||||
ana||
|||
ana


In the mathematical literature, substrings are also called subwords (in America) or factors (in Europe).

Not including the empty substring, the number of substrings of a string of length $n$ where symbols only occur once, is the number of ways to choose two distinct places between symbols to start/end the substring. Including the very beginning and very end of the string, there are $n+1$ such places. So there are $\tbinom{n+1}{2} = \tfrac{n(n+1)}{2}$ non-empty substrings.

## Prefix

A prefix of a string $T = t_1 \dots t_n$ is a string $\widehat T = t_1 \dots t_{m}$, where $m \leq n$. A proper prefix of a string is not equal to the string itself ($0 \leq m < n$);[1] some sources[2] in addition restrict a proper prefix to be non-empty ($0 < m < n$). A prefix can be seen as a special case of a substring.

Example: The string ban is equal to a prefix (and substring and subsequence) of the string banana:

banana
|||
ban


The square subset symbol is sometimes used to indicate a prefix, so that $\widehat T \sqsubseteq T$ denotes that $\widehat T$ is a prefix of $T$. This defines a binary relation on strings, called the prefix relation, which is a particular kind of prefix order.

In formal language theory, the term prefix of a string is also commonly understood to be the set of all prefixes of a string, with respect to that language. See the article on string functions for more details.

## Suffix

A suffix of a string is any substring of the string which includes its last letter, including itself. A proper suffix of a string is not equal to the string itself. A more restricted interpretation is that it is also not empty[1]. A suffix can be seen as a special case of a substring.

Example: The string nana is equal to a suffix (and substring and subsequence) of the string banana:

banana
||||
nana


A suffix tree for a string is a trie data structure that represents all of its suffixes. Suffix trees have large numbers of applications in string algorithms. The suffix array is a simplified version of this data structure that lists the start positions of the suffixes in alphabetically sorted order; it has many of the same applications.

## Border

A border is suffix and prefix of the same string, e.g. "bab" is a border of "babab".

## Superstring

Given a set of $k$ strings $P = \{s_1,s_2,s_3,\dots s_k\}$, a superstring of the set $P$ is single string that contains every string in $P$ as a substring. For example, a concatenation of the strings of $P$ in any order gives a trivial superstring of $P$. For a more interesting example, let $P = \{\text{abcc}, \text{efab}, \text{bccla}\}$. Then $\text{bcclabccefab}$ is a superstring of $P$, and $\text{efabccla}$ is another, shorter superstring of $P$. Generally, we are interested in finding superstrings whose length is small.[clarification needed]