class Solution {
/**
* @param String $s
* @return String
*/
function longestPalindrome($s) {
$newstr= '!#';
for ($i = 0; $i < strlen($s); ++$i) {
$newstr .= $s[$i] . '#';
}
$right = 0;
$center = 0;
$maxlen = 1;
$maxcenter = 0;
$p = array_fill(0, strlen($newstr), 0);
for ($i = 1; $i < strlen($newstr); $i++) {
$mirror = 2 * $center - $i;
$p[$i] = ($i >= $right) ? 1 : min($right -$i, $p[$mirror]);
while(isset($newstr[$i+$p[$i]])&&$newstr[$i+ $p[$i]] == $newstr[$i-$p[$i]]) {
$p[$i]++;
}
if ($p[$i] + $i > $right) {
$right = $p[$i] + $i;
$center = $i;
}
if ($maxlen < $p[$i]) {
$maxlen = $p[$i];
$maxcenter = $i;
}
}
$start=($maxcenter-$p[$maxcenter])/2;
return substr($s,$start,$maxlen-1);
}
}
php算法-拉马车算法,求最大回文
最新推荐文章于 2022-04-23 16:07:18 发布