oc将字符串中单词按照出现次数(次数都不一样)降序排序,排序之后单词只出现一次,源字符串中单词用下划线连接,生成字符串也用下滑线连接
/*
将字符串中单词按照出现次数(次数都不一样)降序排序,排序之后单词只出现一次,源字符串中单词用下划线连接,生成字符串也用下滑线连接(10分)
如传入:@"good_good_study_good_study"
返回:@"good_study"
如传入:@"I_love_I_hate_love_love"
返回:@"love_I_hate"
*/
方法1:选择排序
-(NSString *)sortStringByNumberOfWordsFromString:(NSString *)str
{
NSArray *ary=[str componentsSeparatedByString:@"_"];
NSMutableArray *difary=[[NSMutableArray alloc]init];
[difary addObject:ary[0]];
for (int i=0; i<ary.count; i++) {
BOOL ret=NO;
for (int m=0; m<difary.count; m++)
{
BOOL ifret=[ary[i]isEqualToString:difary[m]];
if (ifret==YES) {ret=YES;break;}
}
if (ret==NO) {[difary addObject:ary[i]];}
}
NSLog(@"%@",difary);
int num=0;
int nun=0;
for (int m=0; m<difary.count; m++) {
for (int k=m; k<difary.count; k++) {
for (int n=0; n<ary.count; n++) {
if ([difary[m]isEqualToString:ary[n]]==YES) {
num++;
}
if ([difary[k]isEqualToString:ary[n]]==YES) {
nun++;
}
}
if(num>nun)
{
NSString *temp=difary[m];
difary[m]=difary[k];
difary[k]=temp;
}
num=0;
nun=0;
NSLog(@"%@",difary);
}
}
NSString *arystr=[difary componentsJoinedByString:@"_"];
NSLog(@"%@",arystr);
return arystr;
}
方法2:字典
- (NSString *)sortStringByNumberOfWordsFromStrings:(NSString *)str
{
NSMutableDictionary *dic=[[NSMutableDictionary alloc] init];
NSArray *ary = [str componentsSeparatedByString:@"_"];
NSMutableString *mystr = [[NSMutableString alloc] init];
for (int i=0; i<ary.count; i++) {
NSArray *ary1=[str componentsSeparatedByString:ary[i]];
NSString *str1 = [ary1 componentsJoinedByString:nil];
int k=(int)(str.length-str1.length)/[ary[i] length];
NSString *set = [NSString stringWithFormat:@"%d",k];
[dic setValue:ary[i] forKey:set];
// NSLog(@"%@",str);
}
// NSLog(@"%@",dic);
for (int j = (int)ary.count; j>0; j--) {
// NSLog(@"%@",[NSString stringWithFormat:@"%d",j]);
NSString *string = [dic objectForKey:[NSString stringWithFormat:@"%d",j]];
// NSLog(@"%@",string);
if (string!=nil) {
[mystr appendString:@"_"];
[mystr appendString:string];
}
}
[mystr deleteCharactersInRange:NSMakeRange(0, 1)];
NSLog(@"%@",mystr);
return mystr;
}