{'fraction_non_alphanumeric': 0.032900834105653386, 'fraction_numerical': 0.005560704355885079, 'mean_word_length': 4.742021276595745, 'pattern_counts': {'":': 0, '<': 0, '<?xml version=': 0, '>': 0, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
String Processing Algorithms

The thesis describes extensive studies on various algorithms for efficient string processing. Data available in/via computers are often of enormous size, and thus, it is significantly important and necessary to invent timeand space-efficient methods to process them. Most of such data are, in fact, stored and manipulated as strings. String matching is most fundamental in string processing, where the problem is to examine whether or not a pattern string p occurs in a text string w. There are two cases to consider; p is fixed and w is flexible, and vise versa. In the former case, it is adequate to employ the noble algorithm by Knuth, Morris, and Pratt that solves the problem in O(|w|) time using O(|p|) space. The thesis, on the other hand, considers the latter case. When w is fixed, it is natural, and ideal, to use a data structure that supports indices of w. Such a data structure is called an index structure. A linear-spaced index structure was first given by Weiner in 1973, named suffix trees. Suffix trees are regarded as a compaction of suffix tries that are a basic index structure requiring quadratic space. On the other hand minimizing suffix tries yields another type of index structure called directed acyclic word graphs (DAWGs), which was introduced by Blumer et al. in 1985. Moreover, by either minimizing suffix trees or compacting DAWGs gives us compact directed acyclic word graphs (CDAWGs). CDAWGs were also invented by Blumer et al. in 1987. In the thesis we delve in those index structures, revealing their relationships in terms of equivalence classes on strings. After giving such theoretical characteristics of them, we explore ingenious algorithms related to those index structures for timeand space-efficient string processing in practice. Particularly, we first introduce an on-line algorithm that directly constructs a CDAWG for a single string w in O(|w|) time, and second, give its straightforward extension to a set S of strings whose running time is O(‖S‖) where ‖S‖ denotes the total length of the strings in S. A further, deeper analysis of the on-line algorithm gives us a generalized