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

时间:2014-09-07 21:39:57

标签: objective-c anagram

我有一个包含多个单词的数组。问题是要求我找到那里的所有字谜并找出哪个字谜最多的字谜。这就是我到目前为止所做的:

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

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

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

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

1 个答案:

答案 0 :(得分:1)

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

  1. 创建名为NSCountedSet的{​​{1}}。这里的对象将是一个排序的字母数组。
  2. 迭代你的单词数组。
  3. 将每个单词变成一个字母数组。
  4. 按字母顺序对此数组进行排序。
  5. 将已排序的数组添加到anagramCounts集。
  6. 执行此操作后,anagramCounts集合将只包含所有可能的字谜,并且每个字符集将存储在有多少字母数量的旁边。

    然后,您可以从此集合中获取对象枚举器,并找到具有最高计数的对象枚举器...

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

    一开始

    1. 创建名为anagramCounts的{​​{1}}并将其设置为0.
    2. 创建一个名为NSInteger的{​​{1}},并将其保留为零。
    3. ...

      最后

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