37# include <gtest/gtest.h>
97 std::string
half =
"abcdefghijklmnopqrstuvwxyz";
109 const auto r =
manacher(
"xxxracecarxxx");
110 EXPECT_EQ(
r.longest_palindrome,
"xxxracecarxxx");
117 const std::string
text(1000,
'z');
184 const std::string
text =
"abcbaXcbcYaabaa";
185 const size_t n =
text.size();
192 for (
size_t i = 0; i < n; ++i)
197 EXPECT_EQ(
r.odd_radius[i],
k) <<
"odd_radius mismatch at i=" << i;
201 for (
size_t i = 0; i < n; ++i)
206 EXPECT_EQ(
r.even_radius[i],
k) <<
"even_radius mismatch at i=" << i;
244 for (
int i = 0; i < 2000; ++i)
245 text.push_back(
'a' + (i * 7 + 3) % 4);
247 const size_t n =
text.size();
253 for (
size_t i = 0; i < n; ++i)
261 for (
size_t i = 0; i < n; ++i)
Palindrome algorithms over strings.
Main namespace for Aleph-w library functions.
and
Check uniqueness with explicit hash + equality functors.
Divide_Conquer_DP_Result< Cost > divide_and_conquer_partition_dp(const size_t groups, const size_t n, Transition_Cost_Fn transition_cost, const Cost inf=dp_optimization_detail::default_inf< Cost >())
Optimize partition DP using divide-and-conquer optimization.
std::string longest_palindromic_substring(const std::string_view text)
Convenience wrapper returning only the longest palindromic substring.
Manacher_Result manacher(const std::string_view text)
Compute palindromic radii and the longest palindrome with Manacher.