Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/246.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
回文php有些案例是对的有些是错的_Php - Fatal编程技术网

回文php有些案例是对的有些是错的

回文php有些案例是对的有些是错的,php,Php,有人能检查我的代码吗?因为在某些情况下,此代码的输出是正确的,但当我尝试测试此输入时,输出不是我期望的 function checkPalindrome($inputString) { $arr1 = str_split($inputString); $arrlength = count($arr1); $max = $arrlength-1; for($min = 0; $min<$max; $min++){ if($arr1[$min] == $arr1[$max])

有人能检查我的代码吗?因为在某些情况下,此代码的输出是正确的,但当我尝试测试此输入时,输出不是我期望的

function checkPalindrome($inputString) {
$arr1 = str_split($inputString);
$arrlength = count($arr1);
$max = $arrlength-1;

   for($min = 0; $min<$max; $min++){
     if($arr1[$min] == $arr1[$max]){        
        $max--;
        return true;     
     }
     return false;  
   }     
}
checkPalindrome("zzzazzazz");
函数checkPalindrome($inputString){
$arr1=str_split($inputString);
$arrlength=计数($arr1);
$max=$arrlength-1;

对于($min=0;$min而言,如果只有第一个字符与最后一个字符匹配,则返回true,而不是检查其余字符

   if($arr1[$min] == $arr1[$max]){     
        $max--;
        return true;     
   }

你的代码到处都是。有很多方法可以解决这个问题,我认为你甚至不需要将字符串拆分成一个字符数组。但是,假设你想这样做,下面是一个可行的实现:

$inputString = "HELLOOLLEH";
$arr1 = str_split($inputString);
$arrlength = count($arr1);
$isPalindrome = true;

for ($i = 0; $i < $arrlength / 2; ++$i) {
    if ($arr1[$i] != $arr1[$arrlength-$i-1]) {
        $isPalindrome = false;
        break;
    }
}

echo $isPalindrome;
$inputString=“HELLOOLLEH”;
$arr1=str_split($inputString);
$arrlength=计数($arr1);
$isPalindrome=true;
对于($i=0;$i<$arrlength/2;++$i){
如果($arr1[$i]!=$arr1[$arrlength-$i-1]){
$isPalindrome=false;
打破
}
}
echo$isPalindrome;

基本思想是沿着字符串走下去,从两端开始,逐个比较两边的字符。如果我们发现两个字符不相同,那么字符串就不能是回文。请注意,这种方法既包括偶数长度的回文,也包括奇数长度的回文。对于奇数长度的回文,中心字符字符可以是任何东西,我编写的循环甚至不会检查它。

一种更简单的方法,使用和删除除A-z字符以外的所有字符,然后使用小写

<?php
function checkPalindrome($str) {
    $str = strtolower(preg_replace('/[^a-z]+/i', '', $str));
    return $str == strrev($str);
}

// test, few taken from http://www.palindromelist.net
$palindromes = [
    'A but tuba.',    
    'madam',    
    'hannah',    
    'A dog, a plan, a canal: pagoda.',    
    'Nurses run',    
    'A dog! A panic in a pagoda!',    
    'A lad named E. Mandala',    
    'A man, a plan, a canal: Panama.',    
    'A man, a plan, a cat, a ham, a yak, a yam, a hat, a canal-Panama!',    
    'A new order began, a more Roman age bred Rowena.',    
    'Decaf and DNA faced.',    
    'Dennis and Edna sinned.',    
    'Devil never even lived.',    
    'Dr. Awkward',    
    'On a clover, if alive, erupts a vast, pure evil; a fire volcano.',    
    'See, slave, I demonstrate yet arts no medieval sees.',    
    'Star? Come, Donna Melba, I’m an amiable man – no Democrats!',    
    'Swap God for a janitor; rot in a jar of dog paws.',    
];

foreach ($palindromes as $str) {
    echo $str.(checkPalindrome($str) ? ' is' : 'is not').' a palindrome'.PHP_EOL;
}

您可以将要检查的字符串作为参数提供给此函数:

function checkPalindrome($text) {
    //Eliminate punctuation and spaces
    $str = preg_replace('/[^a-z]+/i', '', $text);
    
    // Force lower case
    $str = strtolower($str);
    
    //compare
    $verdict = $str == strrev($str) ? '"' . $text . '" ' . 'is a palindrome' : '"' . $text . '"' . ' is not a palindrome';
    
    return $verdict;
}

echo checkPalindrome("Red rum, sir, is murder");
请参见演示

function checkPalindrome($text) {
    //Eliminate punctuation and spaces
    $str = preg_replace('/[^a-z]+/i', '', $text);
    
    // Force lower case
    $str = strtolower($str);
    
    //compare
    $verdict = $str == strrev($str) ? '"' . $text . '" ' . 'is a palindrome' : '"' . $text . '"' . ' is not a palindrome';
    
    return $verdict;
}

echo checkPalindrome("Red rum, sir, is murder");