Open Access Articles- Top Results for Substring


This article is about definition of a substring. For the computer function which performs this operation, see String functions (programming).

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>.


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:


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.


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:


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.


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:


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.


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


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


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