1

是否有内置方法(我无法通过搜索文档找到它)来查看两个字符串中相似字母的数量?字母的顺序不相关,因此比较“abc”和“cad”将有 66% 的匹配字符“c”和“d”。出现的次数也很重要。'a' 应该第一次匹配,但第二次不匹配,因为两个字符串之间只有一个共同的 'a'。目前是否有一种内置方法可以通过使用一些按位运算来做到这一点,还是我必须循环并手动比较?

4

2 回答 2

3

您必须自己构建它,但这里有一个捷径。有一个内置的集合类称为NSCountedSet. 此对象保留每个唯一对象以及添加的每个对象的数量。

您可以获取两个字符串并将它们的字符加载到两个不同的NSCountedSet集合中。然后只需检查结果集合中的项目。例如,从第一个NSCountedSet. 检查它是否存在于第二个NSCountedSet. 该特定字母的 2 个计数中较小的一个是 2 个字符串共有的这些字母的数量。要缩短迭代次数,请从具有较少对象的集合开始,然后枚举这些对象。

这是 Apple 的NSCountedSet. https://developer.apple.com/library/ios/#documentation/Cocoa/Reference/Foundation/Classes/NSCountedSet_Class/Reference/Reference.html

于 2013-03-06T21:57:27.747 回答
1

我很犹豫,但是,可能没有满足您要求的方法。我会这样做:

在 NSString 上创建一个类别。让我们称之为-(float)percentageOfSimilarCharactersForString:(NSString*)targetString

这是属于此类的粗略伪代码:

  1. 制作一个self名为selfCopy and trimselfCopy` 的副本以仅包含唯一字符。
  2. 同样修剪targetString为独特的字符。为了修剪到独特的字符,您可以使用NSSet它或其子类。循环遍历每个字符并添加到集合中会有所帮助。
  3. 现在按 ASCII 值对两组进行排序。
  4. 循环遍历targetString-related NSSet 的每个字符并检查它是否存在于selfCopy-related NSSet 中。为此,您可以使用另一个名为 containsString 的类别。你可以在这里找到。每次 containsString 返回 true 时,增加一个预定义的计数器。
  5. 您的返回值将是(counter_value/length_of_selfCopy)*100.
于 2013-03-06T21:59:58.573 回答