У меня есть аккуратное решение в PHP, опубликованное в этот вопрос о сложностях.
class Solution {
// Function to determine if the input string can make a palindrome by rearranging it
static public function isAnagramOfPalindrome($S) {
// here I am counting how many characters have odd number of occurrences
$odds = count(array_filter(count_chars($S, 1), function($var) {
return($var & 1);
}));
// If the string length is odd, then a palindrome would have 1 character with odd number occurrences
// If the string length is even, all characters should have even number of occurrences
return (int)($odds == (strlen($S) & 1));
}
}
echo Solution :: isAnagramOfPalindrome($_POST['input']);
Он использует встроенные функции PHP (почему бы и нет), но вы можете сделать это самостоятельно, так как эти функции довольно просты.Во-первых, функция count_chars
генерирует именованный массив (словарь в python) со всеми символами, которые появляются в строке, и их количеством вхождений.Его можно заменить пользовательской функцией, такой как:
$count_chars = array();
foreach($S as $char) {
if array_key_exists($char, $count_chars) {
$count_chars[$char]++;
else {
$count_chars[$char] = 1;
}
}
Затем применяется array_filter
с функцией count
для подсчета количества символов с нечетным числом вхождений:
$odds = 0;
foreach($count_chars as $char) {
$odds += $char % 2;
}
И тогда вы просто применяете сравнение в return
(объяснено в комментариях к исходной функции).
return ($odds == strlen($char) % 2)