## Frequent Links

# Substring

A **substring** of a string <math>S</math> is another string <math>S'</math> that occurs "in" <math>S</math>. 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 <math>S</math> is a substring of <math>S</math> that occurs at the beginning of <math>S</math>. A suffix of a string <math>S</math> is a substring that occurs at the *end* of <math>S</math>.

## Substring

A substring (or factor) of a string <math>T = t_1 \dots t_n</math> is a string <math>\hat T = t_{1+i} \dots t_{m+i}</math>, where <math>0 \leq i</math> and <math>m + i \leq n</math>. A substring of a string is a prefix of a suffix of the string, and equivalently a suffix of a prefix. If <math>\hat T</math> is a substring of <math>T</math>, it is also a subsequence, which is a more general concept. Given a pattern <math>P</math>, you can find its occurrences in a string <math>T</math> 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 <math>n</math> 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 <math>n+1</math> such places. So there are <math>\tbinom{n+1}{2} = \tfrac{n(n+1)}{2}</math> non-empty substrings.

## Prefix

A prefix of a string <math>T = t_1 \dots t_n</math> is a string <math>\widehat T = t_1 \dots t_{m}</math>, where <math>m \leq n</math>. A *proper prefix* of a string is not equal to the string itself (<math>0 \leq m < n</math>);^{[1]} some sources^{[2]} in addition restrict a proper prefix to be non-empty (<math>0 < m < n</math>). 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 <math>\widehat T \sqsubseteq T</math> denotes that <math>\widehat T</math> is a prefix of <math>T</math>. 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 <math>k</math> strings <math>P = \{s_1,s_2,s_3,\dots s_k\}</math>, a **superstring** of the set <math>P</math> is single string that contains every string in <math>P</math> as a substring.
For example, a concatenation of the strings of <math>P</math> in any order gives a trivial superstring of <math>P</math>. For a more interesting example, let <math>P = \{\text{abcc}, \text{efab}, \text{bccla}\}</math>. Then <math>\text{bcclabccefab}</math> is a superstring of <math>P</math>, and <math>\text{efabccla}</math> is another, shorter superstring of <math>P</math>. Generally, we are interested in finding superstrings whose length is small.^{[clarification needed]}

## See also

## References

**^**Kelley, Dean (1995).*Automata and Formal Languages: An Introduction*. London: Prentice-Hall International. ISBN 0-13-497777-7.**^**Gusfield, Dan (1999) [1997].*Algorithms on Strings, Trees and Sequences: Computer Science and Computational Biology*. USA: Cambridge University Press. ISBN 0-521-58519-8.