</pre><pre name="code" class="php"><?php
function str($str){
$string='$';
$len=strlen($str);
for($i=0;$i<$len;$i++){
$string.='#';
$string.=$str[$i];
}
$string.='#';
$string.='\0';
return $string;
}
function Manacher($str){
$len=strlen($str);
$maxlen=0;
$mx=0;$p=array();
$pi=1;
for($i=1;$i<$len;$i++){
if($mx>$i){
$p[$i]=min($mx-$i,$p[2*$pi-$i]);
}else {
$p[$i]=1;
}
while(@$str[$i+$p[$i]]==@$str[$i-$p[$i]]&&$i-$p[$i]>0&&$i+$p[$i]<$len){
$p[$i]++;
}
if($maxlen<$p[$i]){
$maxlen=$p[$i];
}
}
return $maxlen-1;
}
function main(){
$str='qweewqrt';
$string=str($str);
$num= Manacher($string);
echo $num;
}
main();直接附上代码
使用 #插入字符串来消除奇偶性。
然后使用的是manancher算法,时间复杂度为O(n);
本文介绍了一种利用#插入字符串消除奇偶性的方法,并通过Manacher算法实现优化,该算法的时间复杂度为O(n),适用于字符串处理任务。

738

被折叠的 条评论
为什么被折叠?



