【问题标题】:Find all anagrams of a string in a given list of strings在给定的字符串列表中查找字符串的所有字谜
【发布时间】:2020-11-08 16:43:45
【问题描述】:

我最近开始学习数据结构和算法,我有一个在 PHP 中一直在努力解决的问题。我能够用 Python 实现它,但我正在努力用 PHP 做同样的事情。任何帮助将不胜感激。

*给定一个字符串数组,将字谜组合在一起。
数组('吃',''地图','吃',''拍','茶','点击') * 以下是我到目前为止所做的:

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;
}

【问题讨论】:

  • @SamsonAdejoro 输出如何?
  • 例如,如果给定的数组是{“cat”, “dog”, “tac”, “god”, “act”},那么输出可能是“cat tac act dog god”。 @vivek_23
  • @SamsonAdejoro 在我的回答中补充了这一点。
  • 正如 nicedev 演示的那样,大部分答案已经在这里:stackoverflow.com/q/9912469/2943403 然后按值分组在这里:stackoverflow.com/a/12706456/2943403 所以这个问题实际上是一个两部分的欺骗。跨度>

标签: php algorithm sorting anagram


【解决方案1】:

你几乎做到了。不太确定空格数是否也很重要,但现在我认为确实如此。

  • 因此拆分字符串以获得单个字符的数组。
  • 按升序/非降序对它们进行排序。
  • 将其内爆以将其作为已排序的字符串。
  • 正如您已经开始 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)));

【讨论】:

    猜你喜欢
    • 2017-05-26
    • 2015-12-27
    • 2016-04-13
    • 2012-04-20
    • 2014-04-13
    • 2012-01-22
    • 2019-05-16
    • 2019-03-29
    • 1970-01-01
    相关资源
    最近更新 更多