编写一个统计字符串中每个连续字符个数的函数,如 `aaabbcc

2018-11-11  本文已影响0人  穿山甲到底说了什么

aaabbcccaabcd 输出为3a2b3c2a1b1c1d
char_count(@"aaabbcccaabcd");

//aaabbcccaabcd -> 3a2b3c2a1b1c1d
NSString* char_count(NSString* str) {
    if (!str.length) return @"Please input a str";
    NSMutableDictionary *charRepeatCountDICTM = [NSMutableDictionary new];
    char lastChar = [str characterAtIndex:0];
    NSString *lastStr = [NSString stringWithFormat:@"%c", lastChar];
    charRepeatCountDICTM[[NSString stringWithFormat:@"%c", lastChar]] = @1;

    NSMutableString *readableStrM = [NSMutableString new];
    for (NSInteger i = 1; i < str.length; i++) {
        char curChar = [str characterAtIndex:i];
        NSString *curStr = [NSString stringWithFormat:@"%c", curChar];
        NSNumber *repeatValue = charRepeatCountDICTM[curStr];
        if (!repeatValue) {
            charRepeatCountDICTM[curStr] = repeatValue = @1;
        }
        if ((int)lastChar == (int)curChar) {
            NSInteger value = repeatValue.integerValue;
            charRepeatCountDICTM[curStr] = @(++value);
        } else {
            NSInteger lastRepeatCount = [charRepeatCountDICTM[lastStr] integerValue];
            [readableStrM appendString:[NSString stringWithFormat:@"%ld%c", lastRepeatCount, lastChar]];
            [charRepeatCountDICTM removeObjectForKey:lastStr];
        }
        lastChar = curChar;
        lastStr = [NSString stringWithFormat:@"%c", lastChar];
    }
    if (charRepeatCountDICTM.allKeys) {
        [readableStrM appendString:[NSString stringWithFormat:@"%ld%c", [charRepeatCountDICTM[lastStr] integerValue], lastChar]];
    }
    return readableStrM.copy;
}
上一篇 下一篇

猜你喜欢

热点阅读