3#ifndef STEP20_SUBSTRING_SEARCH_HPP
4#define STEP20_SUBSTRING_SEARCH_HPP
17 std::ranges::forward_range
auto&& str)
18 -> std::optional<
typename suffix_array<Ts...>::size_type>
20 if (std::ranges::empty(str))
22 for (
auto pos : arr.find(str))
33 if (std::ranges::empty(str))
35 for (
auto pos : arr.find(str))
44 std::ranges::forward_range
auto&& str)
45 -> std::optional<
typename suffix_tree<Ts...>::size_type>
47 if (
auto edge = tree.find(str))
49 return std::ranges::empty(str) ? std::optional{0} : std::nullopt;
62 if (std::ranges::empty(str))
64 if (
auto start = tree.find(str))
65 for (
auto edge : tree.depth_first_search(*start))
66 if (tree.leaf(edge.child_node))
67 co_yield tree.labels(edge).first;
Manber's algorithm for constructing sorted array of non-empty suffixes.
Definition suffix_array.hpp:23
Char value_type
Definition suffix_array.hpp:25
Size size() const
Definition suffix_array.hpp:28
Ukkonen's online algorithm for constructing suffix tree.
Definition suffix_tree.hpp:24
Char value_type
Definition suffix_tree.hpp:26
slice_type labels(const edge_type &edge) const
Definition suffix_tree.hpp:89
Size size() const
Definition suffix_tree.hpp:29
Definition substring_search.hpp:9
auto find_all(const suffix_array< Ts... > &arr, std::basic_string< typename suffix_array< Ts... >::value_type > str) -> generator< typename suffix_array< Ts... >::size_type >
Find all occurrences of the substring.
Definition substring_search.hpp:29
auto find_any(const suffix_array< Ts... > &arr, std::ranges::forward_range auto &&str) -> std::optional< typename suffix_array< Ts... >::size_type >
Find substring offset.
Definition substring_search.hpp:16
auto find_first(const suffix_tree< Ts... > &tree, std::ranges::forward_range auto &&str) -> std::optional< typename suffix_tree< Ts... >::size_type >
Find offset of the first occurrence of the substring.
Definition substring_search.hpp:43
Definition generator.hpp:19
Size first
Definition suffix_tree.hpp:72