如何在两个字符串中查找公共子串

时间:2012-11-04 23:43:22

标签: objective-c ios

过去两天我一直在努力解决问题,并且想知道社区是否可以提供帮助。我有一个NSString数字,我需要比较多少个数字匹配另一个字符串中的数字量。

示例:

     String 1: 14523 25623 651 88

     String 2: 9123 88 14523 333

根据这两个字符串,我们可以看到它们都包含“88”和“14523”。所以有2场比赛。我不知道如何通过代码找出这种比较。

我想过只需要一个子串来分解字符串1并将每个值与字符串2进行比较,但效率非常低。我相信有更好的方法。

有人可以提供任何建议吗?一个例子将非常感激。谢谢!

3 个答案:

答案 0 :(得分:7)

为每个字符串创建一组子字符串。然后做两个集合的交集以找到公共子串。

NSString *string1 = @"14523 25623 651 88";
NSString *string2 = @"9123 88 14523 333";
NSSet *setA = [NSSet setWithArray:[string1 componentsSeparatedByString:@" "]];
NSSet *setB = [NSSet setWithArray:[string2 componentsSeparatedByString:@" "]];
NSMutableSet *common = [setA mutableCopy];
[common intersectSet:setB];
NSLog(@"common substrings = %@", common);

答案 1 :(得分:3)

    NSString *str1 = @"14523 25623 651 88";
    NSString *str2 = @"9123 88 14523 333";
    NSArray *chunks = [str1 componentsSeparatedByString: @" "];
    NSArray *chunks2 = [str2 componentsSeparatedByString: @" "];
    NSMutableSet *intersection = [NSMutableSet setWithArray:chunks];
    [intersection intersectSet:[NSSet setWithArray:chunks2]];
    NSLog(@"%@", [intersection allObjects]);
    

答案 2 :(得分:0)

您创建了两个数组:

第一个数组,方法componentsSeparatedByString,字符串为一。

第二个数组,方法componentsSeparatedByString,字符串为二。

现在,将第二个数组中的elemnt添加到第一个数组,仅在第一个数组不包含此元素时添加。