如何识别两个字符串之间的变化增量?

时间:2012-02-29 16:02:43

标签: objective-c ios string diff delta

我必须实现一个算法,该算法将两个字符串作为输入,并返回一个包含子字符串变化范围的数组。

比方说,范围定义为

typedef struct _NSRange {
    NSUInteger location; // Where the affected substring begins
    NSUInteger length; // How long the affected substring is
} NSRange;

示例:

string1 = "My cat sometimes likes to eat fish.";
string 2 = "My cat always likes to drink fresh water, and eat fish.";

变化是:

  • {7,9}"有时"改为{7,6}"总是"
  • {26,0}添加"喝淡水,"

我需要一个包含按变化分组的子串的数组。在这个例子中,它看起来像这样:

  • "我的猫"
  • "总是"
  • "喜欢"
  • "喝淡水,"
  • "吃鱼。"

目标是突出显示现有字符串中的这些更改,我必须根据更改将该字符串拆分为子字符串。

在重新发明轮子之前 - 公共领域是否有解决方案?

2 个答案:

答案 0 :(得分:2)

我们将任务分为两部分。

第1部分:找出差异。

您可以使用以下代码

执行此操作
NSString *string1 = @"My cat sometimes likes to eat fish.";
 NSString * string2 = @"My cat always likes to drink fresh water, and eat fish.";
NSMutableSet *set1 = [NSMutableSet setWithArray:[string1 componentsSeparatedByString:@" "]];
NSMutableSet *set2 = [NSMutableSet setWithArray:[string2 componentsSeparatedByString:@" "]];
[set2 minusSet:set1];
NSLog(@"%@",set2);

第2部分:突出显示单词。

知道单词之后很容易突出显示。

答案 1 :(得分:0)

您基本上是在尝试实现等效的diff。如维基百科页面中所述,它使用longest common subsequence problem算法。