tl;dr: Great resource for the basics in combinatorics on words, pattern matching, and for the foundations of lossless data compression, but you will need supplementary material if you want to focus on practical implementations.
This books is a well-arranged potpourri of 125 problems within different sub-domains in the field of stringology:
combinatorics, pattern matching, regularities, and lossless data compression.
The book comes with a gentle introduction into this wide field and equips the reader with the necessary background to start tackling the 125 problems.
Each problem with its solution is described within one or up to a few pages.
This brevity makes it possible to study a single problem if you have only one or two hours left during a day.
Although most problems are independent, some depend on previous problems, but that can be easily figured out by reading the short solutions attached to the problems.
Problems also differ in the hardness:
Some problems can be solved very easily, and some are on the intermediate level.
The difficulty also varies with the provided solutions.
Some solutions are very well described, and some are more sketchy so that proving the details is left to the reader.
I think this book is excellent for the following two use cases:
- You want to learn the basics of working with strings.
It introduces various regularities such as repetitions and palindromes,
discusses how to find patterns or regularities in strings, and introduces classic data structures for faster query times.
The format of this book allows you to schedule your perusal frequency very scarcely: for busy people like me, I studied one problem within a 1-2 hour time slot each two weeks, without having felt that I need to review some previous pages.
- The book can be used for a seminar or a reading class in the undergraduate level since it teaches the techniques from the very beginning. The problems are easily understandable, and not incredibly hard to solve. The independence of most of the problems makes it possible that students can choose, solve, and present their favorite problems independently.
I would not recommend this book if you want to focus on practical implementations or on compact/succinct/compressed data structures.
Of course, most of the introduced techniques can be implemented, but there is no discussion in, for instance, how to implement an automaton in practice in an efficient way. Nevertheless, this book is a good entry point for that kind of aim.
Now, having this excellent resource for text algorithms, what the community is missing is a book about 125 problems in compact data structures.