String searching or string-matching is the problem of locating all occurrences of a string x of length m, called the pattern, in another string t of length n, called the text. The algorithmic complexity of the problem is analyzed by means of standard measures: running time and amount of memory space required by the computations. This chapter deals with solutions in which the pattern only is preprocessed. There are mainly three kinds of methods to solve the problem: sequential methods simulating a finite automaton, practically fast methods, and time-space optimal methods. Alternative solutions based on a preprocessing of the text are described in Chapter 3. Parallel algorithms for the problem, presented in Chapter 2, sometimes also generate new serial algorithms. Finally, methods that search for approximate occurrences of a pattern are the subject of Chapters 4, 5, and 6. The problem is of main importance for several reasons. From a theoretical point of view, it is a paradigm for the design of efficient algorithms, in the same way as are, for instance, sorting methods. From a practical point of view, the algorithms developed in this chapter often serve as basic components in text facility software. In the whole chapter, x denotes the pattern of length m (m = |x|), and t is the text of length n (n = |t|). To avoid trivial situations, the pattern is assumed to be a non-empty string (x ≠ λ, m ≠ 0). Since the problem becomes a simple counting exercise when the alphabet reduces to only one symbol, the reader may consider in the following that the common alphabet Σ of the text and the pattern contains at least two symbols (|Σ| > 1). We assume that the pattern is given first. The text is given at search time only. This allows us to preprocess the pattern in order to accelerate the future search in the text. An instance of the problem arises when we try to recognize a specific pattern in various texts or streams of symbols arriving through a communication channel.