在给定的字符串列表中查找字符串的所有字谜

Find all anagrams of a string in a given list of strings

我最近开始学习数据结构和算法,我在 PHP 中遇到了这个问题。我可以用 Python 实现它,但我很难用 PHP 实现同样的效果。任何帮助将不胜感激。

*给定一个字符串数组,将字谜组合在一起。
array('ate', ''map', 'eat', ''pat', 'tea', 'tap') * 以下是我到目前为止所做的事情:

function is_anagram($pharse1,$pharse2){
  $status = false;
  if($pharse1 && $pharse2){
   $pharse1=strtolower(str_replace(" ","", $pharse1));
   $pharse2=strtolower(str_replace(" ","", $pharse2));
   $pharse1 = str_split($pharse1);
   $pharse2 = str_split($pharse2);
   sort($pharse1);
   sort($pharse2);
   if($pharse1 === $pharse2){
   $status = true;
   } 
  }
  return $status;
}

你差不多完成了。不确定空格数是否也很重要,但就目前而言,我认为它很重要。

  • 所以拆分字符串以获得单个字符的数组。
  • 按 ascending/non-decreasing 顺序排序。
  • 将其内爆以将其作为排序字符串获取。
  • 正如您已经开始的 2 个步骤一样,现在您只需将当前字符串放入一个数组中,其中排序键是当前变位词所属的实际键。请参阅代码以获得更清晰的信息。

片段:

<?php

$map = [];

$data = array('ate', 'map', 'eat', 'pat', 'tea' , 'tap');

foreach($data as $str){
    $strSplit = str_split($str);
    sort($strSplit);
    $strSplit = implode("",$strSplit);
    $map[$strSplit][] = $str; 
}

print_r($map);

更新:

查看你的输出格式,你可以在最后执行以下操作以将它们一起呼应:

echo implode(" ",array_merge(...array_values($map)));