前言:
使用类别扩展NSString实现。
题目及代码:
main.m
#import <Foundation/Foundation.h>
#import "NSString+Find.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {
char *s1=malloc(30*sizeof(char)),*s2=malloc(30*sizeof(char));
NSLog(@"输入字符串1(长度小于30):");
gets(s1);
NSLog(@"输入字符串2(长度小于30):");
gets(s2);
NSString *str1=[NSString stringWithUTF8String:s1];
NSString *str2=[NSString stringWithUTF8String:s2];
NSLog(@"你输入的两个字符串为:%@,%@",str1,str2);
NSString *subStr=[str1 findMaxSubstring:str1 andString2:str2];
if (subStr) {
NSLog(@"最长公共子串是:%@",subStr);
}
}
return 0;
}
NSString+Find.h
#import <Foundation/Foundation.h>
@interface NSString (Find)
-(NSString*)findMaxSubstring:(NSString *)string1 andString2:(NSString*)string2;
@end
NSString+Find.m
#import "NSString+Find.h"
@implementation NSString (Find)
-(NSString *)findMaxSubstring:(NSString *)string1 andString2:(NSString *)string2{
NSString *temp;
if ([string1 length]>[string2 length]) {
temp=string1;
string1=string2;
string2=temp;
}
long length1=[string1 length];
NSRange range=NSMakeRange(0, length1);
while (![string2 containsString:[string1 substringWithRange:range]]&&range.location<=length1-1&&range.length>=1) {
if (range.location<length1-range.length) {
range.location++;
}else{
range.length--;
range.location=0;
}
}
if (range.length==0) {
NSLog(@"没有找到公共子字符串!");
return nil;
}else{
NSLog(@"找到了");
return [string1 substringWithRange:range];
}
}
@end
运行结果: