匹配两个字符串中的相同部分 并找出最长的相同部分

1.获取到某个字符串中所有的子字符串

-(NSSet *)GetAllSubStrsWithString:(NSString *)aString
{
    NSMutableSet *set = [NSMutableSet set];
    for (NSUInteger m = 0 ; m < aString.length - 1; m ++)
    {
        for (NSUInteger n = 1 ; n <  aString.length - m; n ++)
        {
            NSRange range = NSMakeRange(m, n);
            NSString *subString = [aString substringWithRange:range];
            [set addObject:subString];
        }
    }
    return  set;
}

2.算法

-(NSString *)getResultWithStirng1:(NSString *)string1
                          String2:(NSString *)string2;
{
    
    NSUInteger maxLegth = MAX(string1.length, string2.length);
    NSString *maxString = string1.length == maxLegth ? string1 : string2;
    NSString *minString = [string1 isEqualToString:maxString] ? string2 : string1;
    if ([maxString containsString:minString])
    {
        return minString;
    }
    NSMutableArray <NSString *>*resultAry = [NSMutableArray array];
    
    NSSet <NSString *>*SubStringset = [self GetAllSubStrsWithString:minString];
    [SubStringset enumerateObjectsUsingBlock:^(NSString * subString, BOOL * _Nonnull stop) {
        if ([maxString containsString:subString])
        {
            [resultAry addObject:subString];
        }
    }];
    
    [resultAry sortUsingComparator:^NSComparisonResult(NSString *result1, NSString *result2) {
        return result1.length > result2.length;
    }];
    NSString *result = resultAry.lastObject;
    return result;
}

3、测试

NSString *string1 = @"01dsadasldas2daasdasdadditdddiodsad01dsadasldas2additdddiodsad";
    NSString *string2 = @"0ffdlvdpvdk12addiwwtiodsdas01dsadasldas2additdddiodsad";
    
    NSString *result = [self getResultWithStirng1:string2 String2:string1];
    
    NSLog(@"%@",result);
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 闲来无事,看到别人说的面试题让取到里两个字符串最长匹配的字符串,于是就想试试,自己捣鼓了一下,方法挺笨的,就是fo...
    zxFlyer阅读 5,550评论 6 1
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,881评论 18 139
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,759评论 18 399
  • 离开
    景尘阅读 164评论 0 0
  • 生活不止眼前的苟且,还有诗和远方的田野。这是高晓松的金句,也成了一些人的至理名言。很多人都会有这样的梦想,放下一切...
    我混故我在阅读 2,077评论 0 1