2012-11-04 60 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從第二個數組添加到第一個數組,只有在第一個數組不包含此元素時才添加。

相關問題