最大字符串匹配

2018-03-27  本文已影响20人  厨子

计算两个字符串的最大字符串匹配,对极端以及错误情况不作处理

首先选定一个字符串作为目标字符串,获取这个目标字符串的所有字符子集

比如 targetString = "abcd",则根据传入的不同 index 可以得到的字符子集为[abcd] 或 [abc,bcd] 或 [ab,bc,cd] 或 [a,b,c,d]

- (NSArray *)arrOfSubString:(NSString *)targetString index:(NSUInteger)index {
    
    NSMutableArray *arr_string = [NSMutableArray new];
    for (int i = 0; i <= targetString.length-index; i ++) {
        NSString * subString = [targetString substringWithRange:NSMakeRange(i, index)];
        [arr_string addObject:subString];
    }
    return arr_string;
}
然后遍历字符子集中的每个元素,与另外一个字符串做匹配
// 最大字符匹配
- (void)matchMaxLengthString:(NSString *)firstString sendString:(NSString *)secondString {
    
    BOOL isMatched = NO;
    NSString *resultString = @"";
    
    for (NSInteger i = secondString.length; i > 0; i--) {
        // 获取字符子集
        NSArray *arrString = [self arrOfSubString:secondString index:i];
        for (int j = 0 ; j < arrString.count; j ++) {
            // 用子集中的每一个元素与目标字符串进行匹配
            if ([firstString rangeOfString:arrString[j]].location != NSNotFound) {
                isMatched = YES;
                resultString = arrString[j];
                break;
            }
        }
        if (isMatched) {
            break;
        }
    }
    NSLog(@"result == %@",resultString);
}
上一篇 下一篇

猜你喜欢

热点阅读