在目标 c 中找到数组内所有字谜的快速方法是啥?

Posted

技术标签:

【中文标题】在目标 c 中找到数组内所有字谜的快速方法是啥?【英文标题】:What is the fast way to find all anagrams inside an array in objective c?在目标 c 中找到数组内所有字谜的快速方法是什么? 【发布时间】:2014-11-01 03:04:00 【问题描述】:

我有一个包含多个单词的数组。问题是让我找到那里的所有字谜,并挑选出哪个字谜最多。这是我目前所拥有的:

创建旧数组的重复数组。 为旧数组创建一个索引数组,以跟踪每个单词的位置。此索引值不会在整个程序中更改 对于新数组,我将对数组中的每个单词进行排序。

例如:在排序前,数组有:[cat dog tac god act] 那么在排序之后,就会有[act dgo act dgo act]

对数组中的单词进行排序,然后数组现在将有:[act act act dgo dgo]。现在我们可以看到所有的字谜都聚集在一起了,但是新数组中的顺序发生了变化。 在索引数组中使用以跟踪旧数组中单词的顺序。

这种方法似乎不错,但它取决于我在原始数组中的单词数。如果我的原始数组足够大,它可能会由于复制过程而减慢程序。此外,我无法跟踪每个单词有多少字谜。考虑到数组很大并且程序必须快速找到所有字谜,解决这类问题的最佳方法是什么?任何帮助将不胜感激。谢谢。

【问题讨论】:

【参考方案1】:

我想我会做这样的事情......

    创建一个名为anagramCountsNSCountedSet。此处的对象将是一个排序后的字母数组。 迭代您的单词数组。 将每个单词变成一个字母数组。 按字母顺序对该数组进行排序。 将排序后的数组添加到anagramCounts 集合中。

完成此操作后,anagramCounts 集合将仅包含所有可能的字谜,每个字谜将存储在计数旁边。

然后您可以从该集合中获取对象枚举器并找到计数最高的那个...

甚至...将其添加到上一个列表中。

刚开始

    创建一个名为highestAnagramCountNSInteger 并将其设置为0。 创建一个名为 mostCommonAnagramNSArray 并将其保留为 nil。

...

最后

    获取[anagramCounts countForObject:sortedArray];,如果它高于highestAnagramCount,则保存这个新值并保存数组。 最后,highestAnagramCount 将告诉您有多少字谜,mostCommonAnagram 将包含排序后的字母数组。

【讨论】:

以上是关于在目标 c 中找到数组内所有字谜的快速方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章

搜索字谜的最快方法是啥?

获取数组中最大的字谜组

C语言中计算数组长度的方法是啥

在二维数组的矩形区域内找到最大值的快速方法

在另一个数组内的数组中搜索对象的最佳/最有效方法是啥?

生成字谜的最有效(就时间而言)算法是啥?