【问题标题】: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]。现在我们可以看到所有的字谜都聚集在一起了,但是新数组中的顺序发生了变化。
  • 在索引数组中使用以跟踪旧数组中单词的顺序。

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

【问题讨论】:

    标签: objective-c anagram


    【解决方案1】:

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

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

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

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

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

    刚开始

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

    ...

    最后

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-07
      • 2017-12-04
      • 2016-07-07
      • 1970-01-01
      • 2013-10-28
      • 2010-12-06
      相关资源
      最近更新 更多