妳的意思是輸出的格式是“字符個數+該字符”吧。
思路就不說了,直接上代碼吧。
NSString?*?string?=?@"aaabbccccdd";NSMutableSet?*?set?=?[[NSMutableSet?alloc]?init];
//?遍歷字符串,按字符來遍歷。每個字符將通過block參數中的substring傳出
[string?enumerateSubstringsInRange:NSMakeRange(0,?string.length)?options:NSStringEnumerationByComposedCharacterSequences?usingBlock:^(NSString?*substring,?NSRange?substringRange,?NSRange?enclosingRange,?BOOL?*stop)?{
//?使用集合來排除多余的substring,因為集合中的元素不能重復出現
[set?addObject:substring];
}];
//?用集合初始化壹個字典,字典的key是集合中的元素,比如@"a",value是@"a"的數組,比如@[@"a",@"a",@"a"]
NSMutableDictionary?*?dictionary?=?[[NSMutableDictionary?alloc]?initWithCapacity:0];
//?遍歷集合
[set?enumerateObjectsUsingBlock:^(id?obj,?BOOL?*stop)?{
NSMutableArray?*?array?=?[NSMutableArray?arrayWithCapacity:0];
//?為字典加入空數組
[dictionary?setObject:array?forKey:obj];
}];
//?現在為字典中的array賦值
//?再次遍歷字符串中的字符
[string?enumerateSubstringsInRange:NSMakeRange(0,?string.length)?options:NSStringEnumerationByComposedCharacterSequences?usingBlock:^(NSString?*substring,?NSRange?substringRange,?NSRange?enclosingRange,?BOOL?*stop)?{
//?找到字典中對應的數組
NSMutableArray?*?array?=?[dictionary?objectForKey:substring];
//?添加進數組
[array?addObject:substring];
}];
//?現在可以開始構造我們的輸出字符串了
NSMutableString?*?mutableString?=?[[NSMutableString?alloc]?init];
//?遍歷字典
[dictionary?enumerateKeysAndObjectsUsingBlock:^(id?key,?id?obj,?BOOL?*stop)?{
NSMutableArray?*?array?=?obj;
[mutableString?appendFormat:@"%d%@",array.count,key];
}];
//?打印輸出字符串
NSLog(@"%@",mutableString);
//?主意到輸出的順序是不對的,因為字典是無序的。所以我們應該再用字典來初始化壹個數組,對數組進行排序,然後再輸出結果
NSMutableArray?*?characterArray?=?[NSMutableArray?arrayWithCapacity:0];
//?再對應壹個個數的數組
NSMutableArray?*?numberArray?=?[NSMutableArray?arrayWithCapacity:0];
[dictionary?enumerateKeysAndObjectsUsingBlock:^(id?key,?id?obj,?BOOL?*stop)?{
[characterArray?addObject:key];
}];
//?排序
[characterArray?sortUsingSelector:@selector(compare:)];
//?遍歷characterArray,用字典中對應的元素來構造對應的numberArray
for?(NSString?*?subStr?in?characterArray)?{
NSArray?*?array?=?[dictionary?objectForKey:subStr];
[numberArray?addObject:[NSNumber?numberWithInt:array.count]];
}
//?現在,characterArray中就是放的@"a",@"b",@"c",@"d"
//?numberArray中放的是對應的個數
//?重新構造我們的輸出字符串
mutableString?=?[[NSMutableString?alloc]?init];
for?(int?i?=?0;?i?<?characterArray.count;?i++)?{
[mutableString?appendFormat:@"%@%@",[numberArray?objectAtIndex:i],[characterArray?objectAtIndex:i]];
}
NSLog(@"%@",mutableString);
大部分思路都在註釋裏面,有不清楚的地方,在對應的步驟那裏答應對應的對象就是了,算法不是很復雜。輸出3a2b4c2d