【iOS面试机试题】实现一个功能函数

函数功能如下:
对于输入的字符串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);
    
}

以上代码实现可能思路比较按部就班,欢迎大家提供更好的方法交流

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容