Counting Distinct (Non-)crossing Substrings
摘要
Let w be a string of length n. The problem of counting factors crossing a position - Problem 64 from the textbook “125 Problems in Text Algorithms” [Crochemore, Leqroc, and Rytter, 2021], asks to count the number \(\mathcal {C}(w,k)\) (resp. \(\mathcal {N}(w,k)\) ) of distinct substrings in w that have occurrences containing (resp. not containing) a position k in w. The solutions provided in their textbook compute \(\mathcal {C}(w,k)\) and \(\mathcal {N}(w,k)\) in O(n) time for a single position k in w, and thus a direct application would require \(O(n^2)\) time for all positions \(k = 1, \ldots , n\) in w. Their solution is designed for constant-size alphabets. In this paper, we present new algorithms which compute \(\mathcal {C}(w,k)\) in O(n) total time for general ordered alphabets, and \(\mathcal {N}(w,k)\) in O(n) total time for linearly sortable alphabets, for all positions \(k = 1, \ldots , n\) in w.