字符串算法合集

377 阅读1分钟

判断是否回文字符串 aabbaa 依然 aabbaa,abcba

思路

  • 从左到右、从右到左遍历,左小于右的情况,char是否相等即可。
/*
 判断是否回文字符串
 **/
+ (BOOL)isPanlinedorm:(NSString *)str {
    if (![str isKindOfClass:[NSString class]] && str.length > 0) {
        return NO;
    }
    
    int l = 0;
    int r = (int)str.length - 1;
    while (l < r) {
        char lString = [str characterAtIndex:l];
        char rString = [str characterAtIndex:r];
        
        if (lString != rString) {
            return NO;
        }
        l++;
        r--;
        
    }
    
    return YES;
}

判断一个字符串是否为另一个的子字符串 abcdefg abcd,abcd是abcdefg的子串

思路

  • 先判断字符串是否为空,满足条件判断子字符串是否大于主字符串
  • 截取主字符串,长度为子字符串长度。遍历比较
/**
 判断是否子字符串
 */
+ (BOOL)isMainStr:(NSString *)mainStr containStr:(NSString *)str {
    if (!(mainStr.length > 0 && str.length > 0)) {
        return NO;
    }
    if (str.length > mainStr.length) {
        return NO;
    }
    
    int length = (int)mainStr.length - (int)str.length;
    
    BOOL result = NO;
    
    for (int i = 0; i<length; i++) {
        if ([str isEqualToString:[mainStr substringWithRange:NSMakeRange(i, str.length)]]){
            result = YES;
        }
    }
    return result;
}

RLE算法

/**
 RLE算法 输入aaabbccc输出a3b2c3
 */
+ (NSString *)RLEstr:(NSString *)str {
    
    int cnt = 1;
    for (int i = 0; i<str.length-1; i++) {
        char a = [str characterAtIndex:i];
        char b = [str characterAtIndex:i+1];
        if (a == b) {
            cnt++;
        }else{
            NSLog(@"%c-%d",a,cnt);
            cnt = 1;
        }
    }
    return @"end";
}