Php 获取字符串中的所有回文

Php 获取字符串中的所有回文,php,Php,我被要求用php编写一个程序,其中需要打印给定字符串中出现的所有回文 示例:对于字符串I O M K I L O L I K T C J I O p L p O 答案是: O p L p O和 基洛基洛基洛基洛基洛基洛基洛基洛基洛基洛基洛基洛基洛基洛基洛基洛基洛基洛基洛基洛基洛基洛基洛基洛基洛基洛基洛基洛基洛基洛基洛基洛基洛基洛基洛基洛基洛基洛基洛基洛基洛基洛基洛基洛基洛基洛 在执行此操作时,应记住,长度超过3个字符的每个回文都可以分解为更多的回文,但您只需要打印出每个回文集可能的最长大小(因此

我被要求用php编写一个程序,其中需要打印给定字符串中出现的所有回文

示例:对于字符串I O M K I L O L I K T C J I O p L p O

答案是:

O p L p O和 基洛基洛基洛基洛基洛基洛基洛基洛基洛基洛基洛基洛基洛基洛基洛基洛基洛基洛基洛基洛基洛基洛基洛基洛基洛基洛基洛基洛基洛基洛基洛基洛基洛基洛基洛基洛基洛基洛基洛基洛基洛基洛基洛基洛基洛基洛

在执行此操作时,应记住,长度超过3个字符的每个回文都可以分解为更多的回文,但您只需要打印出每个回文集可能的最长大小(因此,对于示例字符串,您不应打印LOL、LL、PLLP和ILOLI)

我试过了,但只能做到这一点:

$data = 'I O M K I L O L I K T C J I O P L L P O';
$data = str_replace(' ', '', $data);    

$palindromes = [];
for($i=0; $i<strlen($data); $i++ )  {
    for($j=3; $j<=(strlen($data)-$i); $j++){
        $word = substr($data, $i, $j);
        $reverse_word = strrev($word);
        if($word == $reverse_word){
            print "Word: ".$word."<br/>";                   
        }
    }    
}

这不是预期的输出。我应该怎样去掉像ILOLI,LOL PLLP这样的字符串,因为我应该得到最长的回文。

根据你的例子,你提到的答案是O p L p O(六个字符长)和K I L O L K(七个字符长),但后来你暗示只应该返回最长的回文

假设您指的是后一种情况,您可以首先将所有回文分配给数组,然后对数组进行排序,如下所示:

function str_length_sort($first, $second) {
  return strlen($second) - strlen($first);
}
$data = 'I O M K I L O L I K T C J I O P L L P O';
$data = str_replace(' ', '', $data);    
$palindromes = [];
for($i=0; $i<strlen($data); $i++ )  {
  for($j=3; $j<=(strlen($data)-$i); $j++){
    $word = substr($data, $i, $j);
    $reverse_word = strrev($word);
     if($word == $reverse_word){
        $palindromes[] = $word;                           
      }
  }    
}
usort($palindromes, 'str_length_sort');
$max = strlen($palindromes[0]);
foreach ($palindromes as $p) {
  $length = strlen($p);
  if ($length >= $max) {
    echo $p;
  }
}
函数str\u length\u sort($first,$second){
返回strlen($second)-strlen($first);
}
$data='I O M K I L O L I K T C J I O P L P O';
$data=str_替换(“”,,$data);
$palindromes=[];

对于($i=0;$i根据您的示例,您提到的答案是O p L p O(六个字符长)和K i L O L i K(七个字符长),但后来您暗示只应返回最长的回文

假设您指的是后一种情况,您可以首先将所有回文分配给数组,然后对数组进行排序,如下所示:

function str_length_sort($first, $second) {
  return strlen($second) - strlen($first);
}
$data = 'I O M K I L O L I K T C J I O P L L P O';
$data = str_replace(' ', '', $data);    
$palindromes = [];
for($i=0; $i<strlen($data); $i++ )  {
  for($j=3; $j<=(strlen($data)-$i); $j++){
    $word = substr($data, $i, $j);
    $reverse_word = strrev($word);
     if($word == $reverse_word){
        $palindromes[] = $word;                           
      }
  }    
}
usort($palindromes, 'str_length_sort');
$max = strlen($palindromes[0]);
foreach ($palindromes as $p) {
  $length = strlen($p);
  if ($length >= $max) {
    echo $p;
  }
}
函数str\u length\u sort($first,$second){
返回strlen($second)-strlen($first);
}
$data='I O M K I L O L I K T C J I O P L P O';
$data=str_替换(“”,,$data);
$palindromes=[];

对于($i=0;$Itis给我的结果与我打印数组回文时得到的结果相同。这个问题的目的是获得所有可能的最长回文,输入的字符串可能有N个字符。所以,你的意思是可能有很多回文,比如说,7个字符长,脚本应该全部打印出来?我编辑了我的相应地回答。是的,这就是预期的。好吧,用任何数据尝试我当前的代码:-)当我尝试使用不同的字符串作为$data时,这对我起到了作用。这给了我与打印数组回文时相同的结果。这个问题的目的是获得所有可能的最长回文,输入的字符串可能有N个字符。因此,你的意思是可能有很多回文,比如说,有7个字符ng和脚本应该全部打印出来吗?我相应地编辑了我的答案。是的,这是预期的结果。好吧,用任何数据尝试我当前的代码:-)对我有效,当我尝试使用不同的字符串作为$data时。有些东西告诉我strpos()可能有帮助,但我不确定它在哪里以及如何放置?有些东西告诉我strpos()可以帮忙,但我不知道放在哪里,怎么放?