大体意思是,给出两个字符串,用自己最熟悉的编程语言找出两个字符串中匹配最长的字符串。如:“ascdefd”和“mntrcdefpk”则匹配出的最大字符串为:cdef。自己实现了一下,呵呵,当时练笔吧,或许以后能用到。开始是用线程实现的,如果启动多个线程匹配的话,可能会更快,后来还是谢了个一般方法来实现,这个看需要和效率要求吧。废话少说,记录一下自己写的代码,以后或许用得上。
int main(int argc, char *argv[])
{
NSLog(@"start");
NSString *bigStr = @"1234567890123456789012345678901234567890";
NSString *smallStr = @"123456cffdsf7890";
int length = smallStr.length;
NSMutableArray *ary = [NSMutableArray array];
for (int sublength = length; sublength > 0 ; sublength--) {
[ary removeAllObjects];
for (int j = 0; j < length; j++) {
if ((j + sublength ) <= length) {
NSString *sub = [smallStr substringWithRange:NSMakeRange(j, sublength)];
[ary addObject:sub];
}
}
BOOL isFindMaxLength = NO;
for( NSString *sub in ary) {
for (int j = 0; j < bigStr.length;) {
BOOL isFind = YES;
for (int i = 0; i < sub.length; i++)
{
if ((j + i) >= bigStr.length)
{
isFind = NO;
j = bigStr.length;
break;
}
NSString *temp = [sub substringWithRange:NSMakeRange(i, 1)];
NSString *temp2 = [bigStr substringWithRange:NSMakeRange(j + i, 1)];
if (![temp isEqualToString: temp2]) {
j ++ ;
i = 0;
isFind = NO;
break;
}
}
if (isFind) {
isFindMaxLength = isFind;
NSLog(@"%@",sub);
break;
}
}
}
if (isFindMaxLength) {
break;
}
}
NSLog(@"end");
}
运行结果: