2012-11-04 58 views
2

过去两天我一直在解决问题,并想知道社区是否可以提供帮助。我有一个NSString数字,我需要比较多少个数字与另一个字符串中的数字数量相匹配。如何在两个字符串中找到常见子字符串

例子:

 String 1: 14523 25623 651 88 

    String 2: 9123 88 14523 333 

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

我曾想过只是有一个子字符串来拆分字符串1并将每个值与字符串2进行比较,但这是非常低效的。我相信还有更好的办法。

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

+0

这似乎是任何编码人员在求职面试中可能会被问到的问题。 –

+0

@MichaelDautermann好东西,我还在学习:) –

+0

所有的答案* *假设数字是由空格分隔。这是你的字符串中的数字吗?换句话说,你所寻找的数字之间总是会有空格......或者可能不是?例如。 “'145232562365188'”,其中可能有另一个“'91238814523333”字符串中的“'14523”“ –

回答

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); 
+0

谢谢你愿意提供一个例子! –

+0

@AlexG - 用代码更新。 – rmaddy

+0

这是一些漂亮的代码,并正常工作。非常感谢!将在“6分钟”中接受 –

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]); 
+1

哇 - 吓我们的代码有多类似:) – rmaddy

+1

是啊! :D即使我惊讶地看着另一个答案! – Neo

+0

但我想这是Obj-C中最小阻力的路径 – Neo

0

创建两个数组:

第一阵列方法用绳子一个componentsSeparatedByString。

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

现在,将elemnt从第二个数组添加到第一个数组,只有在第一个数组不包含此元素时才添加。

相关问题