function longestPalindromeSubstring(string $s): string {
$start = 0;
$end = 0;
$length = strlen($s);
for ($i = 0; $i < $length; $i++) {
$len1 = expandFromCenter($s, $i, $i); // Odd length
$len2 = expandFromCenter($s, $i, $i + 1); // Even length
$len = max($len1, $len2);
if ($len > ($end - $start)) {
$start = $i - intdiv($len - 1, 2);
$end = $i + intdiv($len, 2);
}
}
return substr($s, $start, $end - $start + 1);
}
function expandFromCenter(string $s, int $left, int $right): int {
while ($left >= 0 && $right < strlen($s) && $s[$left] === $s[$right]) {
$left--;
$right++;
}
return $right - $left - 1;
}
$str = "qabcbaproggorpxyyxzv";
$longestPalindrome = longestPalindromeSubstring($str);
echo "Longest palindrome substring = " . $longestPalindrome . "\n";
echo "Length palindrome substring length = " . strlen($longestPalindrome);
/*
run:
Longest palindrome substring = proggorp
Length palindrome substring length = 8
*/