ACM模板库

ACM模板库


manacher

<pre><code>#include &lt;iostream&gt; #include &lt;string&gt; #include &lt;algorithm&gt; using namespace std; const int maxn = 1e5+6; string str; int p[maxn]; void init(string &amp;str){ int len = str.size(); str.insert(0, "$"); for(int i = len+1; i &gt; 0; i--){ str.insert(i, "#"); } return; } int Manacher(string str){ init(str); int max_len = -1; int center; int max_size = 0; for(int i = 1; i &lt; str.size(); i++){ if(i &lt; max_size){ p[i] = min(p[2*center - i], max_size-i); } else p[i] = 1; while(str[i+p[i]] == str[i-p[i]]) p[i]++; if(i + p[i] &gt; max_size){ center = i; max_size = i + p[i]; } max_len = max(max_len, p[i] - 1); } return max_len; }</code></pre>

页面列表

ITEM_HTML