<?php
function isPalindrome(string &$str): bool
{
if (strlen($str) <= 1) {
return true; // reached the middle of the palindrome successfully
}
if ($str[0] !== $str[strlen($str) - 1]) {
return false; // outermost characters are not identical, halt processing
}
$str = substr($str, 1, -1);
return (__FUNCTION__)($str); // traverse deeper and bubble outcome to top level
}
function sanitizePalindrome(&$str)
{
return preg_replace('/[^a-z]+/', '', strtolower($str));
}
$tests = [
'radar',
'f',
'neveroddoreven',
'foo',
'palindrome',
'Red rum, sir, is murder'
];
foreach ($tests as $test) {
$test = sanitizePalindrome($test); // this is optional
printf("%20s : %s\n", $test, json_encode(isPalindrome($test)));
}
- Output for 8.1.0 - 8.1.33, 8.2.0 - 8.2.29, 8.3.0 - 8.3.25, 8.4.1 - 8.4.12
- radar : true
f : true
neveroddoreven : true
foo : false
palindrome : false
redrumsirismurder : true
preferences:
60.66 ms | 406 KiB | 5 Q