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

Posted

技术标签:

【中文标题】在给定的字符串列表中查找字符串的所有字谜【英文标题】: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 演示的那样,大部分答案已经在这里:***.com/q/9912469/2943403 然后按值分组在这里:***.com/a/12706456/2943403 所以这个问题实际上是一个两部分的欺骗。跨度> 【参考方案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)));

【讨论】:

以上是关于在给定的字符串列表中查找字符串的所有字谜的主要内容,如果未能解决你的问题,请参考以下文章

算法:按字典顺序在给定索引处查找给定字符串的字谜

代码高尔夫:查找所有字谜

查找字符串中的所有字谜如何优化

使用python中的递归解决方案在字符串列表中查找字谜

将字符串与字符串列表进行比较以在 Python 中查找字谜

查找给定单词的字谜