函数功能如下:
对于输入的字符串s,忽略大小写,返回按照英文字母出现的频率从高到低排序的小写字符串,对于出现次数相同的字母,按照字典序排序。如果输入的字符串不包含英文字母,返回空字符串。注意数字,标点,空格都不是英文字母。
例如:输入字符:We Attack at Dawn ,输出:atwcdekn
解释:在这个例子中不区分大小写,字母 a 出现了3次,字母 t 出现了3次,字母 w 出现2次,字母 c,d,e,k,n 均出现一次,对于出现次数相同的字母按照字典书序排序,例如按照字典序字母 a 排在字母 t 之前,所以输出结果为:atwcdekn
代码实现
void PrintOut(NSString *text){
NSString *result = @"";
NSMutableArray *array1 = [NSMutableArray array];
//取出小写字母放入数组中
text = text.lowercaseString;
for(int i =0; i < [text length]; i++){
char character = [text characterAtIndex:i];
if ([[NSCharacterSet lowercaseLetterCharacterSet] characterIsMember:character]) {
[array1 addObject:[NSString stringWithFormat:@"%c",character]];
}
}
// 相同的字符放入同一个数组中变为二维数组
NSMutableArray *dateMutablearray = [@[] mutableCopy];
NSMutableArray *array = [NSMutableArray arrayWithArray:array1];
for (int i = 0; i < array.count; i ++) {
NSString *string = array[i];
NSMutableArray *tempArray = [@[] mutableCopy];
[tempArray addObject:string];
for (int j = i+1; j < array.count; j ++) {
NSString *jstring = array[j];
if([string isEqualToString:jstring]){
[tempArray addObject:jstring];
[array removeObjectAtIndex:j];
}
}
[dateMutablearray addObject:tempArray];
}
// NSLog(@"dateMutable:%@",dateMutablearray);
// 按照二维数组元素个数排序
for (int i = 0; i < dateMutablearray.count; i++) {
for (int j = i+1; j < dateMutablearray.count; j++) {
NSInteger inum = ((NSArray*)dateMutablearray[i]).count;
NSInteger jnum = ((NSArray*)dateMutablearray[j]).count;
if (inum < jnum) {
[dateMutablearray exchangeObjectAtIndex:i withObjectAtIndex:j];
}
}
}
NSLog(@"dateMutable:%@",dateMutablearray);
BOOL continueNext = YES;
//把二维数组中数组个数相同的放入一个数组中
NSMutableArray *numberarray = [@[] mutableCopy];
for (int i = 0; i < dateMutablearray.count; i ++) {
NSArray *arr = dateMutablearray[i];
NSInteger num = arr.count;
NSMutableArray *tempArray = [@[] mutableCopy];
NSString *istr = arr[0];
[tempArray addObject:istr];
if (num == 1) {
if (continueNext) {
for (int j = i+1; j < dateMutablearray.count; j ++) {
NSArray *jarr = dateMutablearray[j];
// NSInteger jnum = jarr.count;
NSString *jstr = jarr[0];
[tempArray addObject:jstr];
}
[numberarray addObject:tempArray];
}
continueNext = NO;
}else{
for (int j = i+1; j < dateMutablearray.count; j ++) {
NSArray *jarr = dateMutablearray[j];
NSInteger jnum = jarr.count;
NSString *jstr = jarr[0];
if(num == jnum){
[tempArray addObject:jstr];
[dateMutablearray removeObjectAtIndex:j];
}
}
[numberarray addObject:tempArray];
}
}
NSLog(@"numberarray:%@",numberarray);
// 二维数组中每个数组的元素排序
NSMutableArray *sortarray = [@[] mutableCopy];
for (int i = 0; i < numberarray.count; i++) {
NSArray *arr = numberarray[i];
NSArray *newArray = [arr sortedArrayUsingSelector:@selector(compare:)];
[sortarray addObject:newArray];
}
NSLog(@"sortarray:%@",sortarray);
// 拼接所有数组所有元素
for (int i = 0; i < sortarray.count; i++) {
NSArray *arr = sortarray[i];
for (int j = 0; j < arr.count; j++) {
result = [result stringByAppendingString:arr[j]];
}
}
NSLog(@"result:%@",result);
}
以上代码实现可能思路比较按部就班,欢迎大家提供更好的方法交流