是否有内置方法(我无法通过搜索文档找到它)来查看两个字符串中相似字母的数量?字母的顺序不相关,因此比较“abc”和“cad”将有 66% 的匹配字符“c”和“d”。出现的次数也很重要。'a' 应该第一次匹配,但第二次不匹配,因为两个字符串之间只有一个共同的 'a'。目前是否有一种内置方法可以通过使用一些按位运算来做到这一点,还是我必须循环并手动比较?
问问题
174 次
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
这是属于此类的粗略伪代码:
- 制作一个
self
名为selfCopy and trim
selfCopy` 的副本以仅包含唯一字符。 - 同样修剪
targetString
为独特的字符。为了修剪到独特的字符,您可以使用NSSet
它或其子类。循环遍历每个字符并添加到集合中会有所帮助。 - 现在按 ASCII 值对两组进行排序。
- 循环遍历
targetString
-related NSSet 的每个字符并检查它是否存在于selfCopy
-related NSSet 中。为此,您可以使用另一个名为 containsString 的类别。你可以在这里找到。每次 containsString 返回 true 时,增加一个预定义的计数器。 - 您的返回值将是
(counter_value/length_of_selfCopy)*100
.
于 2013-03-06T21:59:58.573 回答