// OptimizedSearch.h - Boyer–Moore (bad character) based substring search #pragma once #include #include #include #include class OptimizedSearch { public: OptimizedSearch() = default; // Find first occurrence at or after start. Returns npos if not found. std::size_t find_first(const std::string &text, const std::string &pattern, std::size_t start = 0); // Find all non-overlapping matches at or after start. Returns starting indices. std::vector find_all(const std::string &text, const std::string &pattern, std::size_t start = 0); private: std::array bad_char_{}; std::string last_pat_; void build_bad_char(const std::string &pattern); };