最长公共子字符串查找(OC实现)

前言:

使用类别扩展NSString实现。

题目及代码:

main.m
//实现查找两个字符串中最大相同的子串,例如:”likeyou”和”lookyou”,最大相同的子串是”you”。
#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{
//    首先找到长度较小的字符串 保证string1<string2
    NSString *temp;
    if ([string1 length]>[string2 length]) {
        temp=string1;
        string1=string2;
        string2=temp;
    }
    long length1=[string1 length];
//    然后从长到短获取string1的子字符串,去string2中找,如果包含,则返回该子字符串,否则再找
    NSRange range=NSMakeRange(0, length1);
    while (![string2 containsString:[string1 substringWithRange:range]]&&range.location<=length1-1&&range.length>=1) {//如果string2不包含目前的子串并且没有越界

//        判断下一步操作
        if (range.location<length1-range.length) {//不需要减length
            range.location++;
        }else{
            range.length--;
            range.location=0;
        }
    }
//    最后判断并返回子串
    if (range.length==0) {
        NSLog(@"没有找到公共子字符串!");
        return nil;
    }else{
        NSLog(@"找到了");
        return [string1 substringWithRange:range];
    }
    }
@end

运行结果:

这里写图片描述

Objective-C中,可以使用正则表达式来查找和替换字符串。使用正则表达式可以根据特定的规则来匹配和操作字符串。 首先,使用`NSRegularExpression`类来创建一个正则表达式对象。可以通过使用`regularExpressionWithPattern:options:error:`方法并传入匹配模式、选项和错误对象来创建该对象。 接下来,可以使用`matchesInString:options:range:`方法来在字符串查找所有符合模式的串。这个方法将返回一个包含`NSTextCheckingResult`对象的数组,每个对象表示一个匹配结果。可以通过`range`属性来获取匹配串在原始字符串中的位置。 然后,可以使用`substringWithRange:`方法从原始字符串中提取出匹配的串。 如果需要替换字符串中的某些内容,可以使用`replaceMatchesInString:options:range:withTemplate:`方法来替换匹配的串。该方法将根据提供的替换模板来替换匹配内容。例如,可以使用`"****"`作为替换模板来替换电话号码中的中间四位。 总结一下,在Objective-C查找和替换字符串的步骤如下: 1. 创建`NSRegularExpression`对象并指定匹配模式和选项。 2. 使用`matchesInString:options:range:`方法在字符串查找符合模式的串。 3. 遍历匹配结果数组,使用`substringWithRange:`方法提取出匹配的串。 4. 如果需要替换字符串中的内容,使用`replaceMatchesInString:options:range:withTemplate:`方法进行替换。 希望这些信息对你有帮助。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值