編寫一個統計字串中每個連續字元個數的函式,如 `aaabbcccaabcd` 輸出為`3a2b3c2a1b1c1d`

穿山甲到底說了什麼發表於2018-12-19

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;
}
複製程式碼

相關文章