在目标 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】:我想我会做这样的事情......
-
创建一个名为
anagramCounts
的NSCountedSet
。此处的对象将是一个排序后的字母数组。
迭代您的单词数组。
将每个单词变成一个字母数组。
按字母顺序对该数组进行排序。
将排序后的数组添加到anagramCounts
集合中。
完成此操作后,anagramCounts
集合将仅包含所有可能的字谜,每个字谜将存储在计数旁边。
然后您可以从该集合中获取对象枚举器并找到计数最高的那个...
甚至...将其添加到上一个列表中。
刚开始
-
创建一个名为
highestAnagramCount
的NSInteger
并将其设置为0。
创建一个名为 mostCommonAnagram
的 NSArray
并将其保留为 nil。
...
最后
-
获取
[anagramCounts countForObject:sortedArray];
,如果它高于highestAnagramCount
,则保存这个新值并保存数组。
最后,highestAnagramCount
将告诉您有多少字谜,mostCommonAnagram
将包含排序后的字母数组。
【讨论】:
以上是关于在目标 c 中找到数组内所有字谜的快速方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章