数据结构

2020-12-04  本文已影响0人  Jean_Lina
#pragma mark 字符串反转
- (void)reverseString:(NSString *)inputString {
    NSMutableString *tempString = [NSMutableString stringWithString:inputString];
    for (int i = 0; i < (inputString.length + 1)/2.0; i++) {
        [tempString replaceCharactersInRange:NSMakeRange(i, 1) withString:[inputString substringWithRange:NSMakeRange(inputString.length - i - 1, 1)]];
        [tempString replaceCharactersInRange:NSMakeRange(inputString.length - i - 1, 1) withString:[inputString substringWithRange:NSMakeRange(i, 1)]];
    }
    NSLog(@"逆转字符串:%@", tempString);
}
#pragma mark 合并两个有序数组
- (void)combineTwoArray:(NSArray *)array1 array2:(NSArray *)array2 {
    NSMutableArray *tempArray = [NSMutableArray array];
    int p = 0;
    int q = 0;
    while (p < array1.count && q < array2.count) {
        if ([array1[p] integerValue] <= [array2[q] integerValue]) {
            [tempArray addObject:array1[p]];
            p++;
        } else {
            [tempArray addObject:array2[q]];
            q++;
        }
    }
    while (p < array1.count) {
        [tempArray addObject:array1[p++]];
    }
    while (q < array2.count) {
        [tempArray addObject:array2[q++]];
    }
    NSLog(@"合并后的新数组:%@", tempArray);
}
#pragma mark iOS无重复字符的最长子串
- (void)calculateNORepeatLongString {
    NSString *inputString = @"goodmorningdesk";
    NSMutableSet *setArray = [NSMutableSet set];
    NSInteger i = 0;
    NSInteger j = 0;
    NSInteger index = 0;
    NSInteger length = 0;
    while (i < inputString.length && j < inputString.length) {
        NSString *subString = [inputString substringWithRange:NSMakeRange(j, 1)];
        if (![setArray containsObject:subString]) {
            [setArray addObject:subString];
            j++;
            if (j - i > length) {
                length = j - i;
                index = i;
            }
        } else {
            NSString *subString = [inputString substringWithRange:NSMakeRange(i, 1)];
            [setArray removeObject:subString];
            i++;
        }
    }
    NSString *targetString = [inputString substringWithRange:NSMakeRange(index, length)];
    NSLog(@"目标字符串:%@", targetString);
}

#pragma mark 数组去重法(遍历数组去重、字典、集合)
- (void)removeRepeateObject {
    NSMutableArray *tempArray = [NSMutableArray array];
    NSArray *array = @[@"horse", @"cat", @"snake", @"dog", @"cat"];
    //3 遍历数组去重
    for (NSString *item in array) {
        if (![tempArray containsObject:item]) {
            [tempArray addObject:item];
        }
    }
    NSLog(@"tempArray = %@",tempArray);
    //2 字典获取无重复元素
    NSMutableDictionary *dictionary = [NSMutableDictionary dictionary];
    for (NSString *item in array) {
        [dictionary setObject:item forKey:item];
    }
    NSArray *tempArray1 = [dictionary allValues];
    NSLog(@"tempArray1 = %@",tempArray1);
    //1 集合获取无重复元素
    NSSet *setArray = [NSSet setWithArray:array];
    NSLog(@"setArray = %@",setArray);
}

#pragma mark 获取字符串中的数字 如何从字符串中得到一个整数?
- (void)getNumberFromString {
    NSString *inputString = @"a0b0c1d2e3f4fda8fa8fad9fsad23";
    NSCharacterSet *characterSet = [[NSCharacterSet decimalDigitCharacterSet] invertedSet];
    NSArray *tempArray = [inputString componentsSeparatedByCharactersInSet:characterSet];
    NSString *targetString = [tempArray componentsJoinedByString:@""];
    NSLog(@"最终数字字符串:%@", targetString);
}

#pragma mark 判断输入的是否是有效的IP地址
- (BOOL)isValidateIPAddress:(NSString *)ipString {
    if (ipString == nil) {
        NSLog(@"输入的字符串不能为空");
        return NO;
    }
    NSArray *tempArray = [ipString componentsSeparatedByString:@"."];
    if (tempArray.count == 4) {
        for (NSString *string in tempArray) {
            NSScanner *scanner = [NSScanner scannerWithString:string];
            int value;
            BOOL result = [scanner scanInt:&value] && [scanner isAtEnd];
            if (result) {
                //输入的是数字
                int number = [string intValue];
                if (!(number >= 0 && number <= 255)) {
                    NSLog(@"输入的字符串不是有效的IP地址");
                    return NO;
                }
            } else {
                NSLog(@"输入的字符串不是有效的IP地址");
                return NO;
            }
        }
        NSLog(@"输入的字符串是有效的IP地址%@", ipString);
        return YES;
    }
    return NO;
}

// MARK: 给定一个整型数组中有且仅有两个数之和等于目标值,这两个数在数组中的序号
    func findTargerValueIndex(_ nums: [Int], _ target: Int) -> [Int] {
        var dict = [Int: Int]()
        for (i, object) in nums.enumerated() {
            if let index = dict[target - object] {
                return [index, i]
            } else {
                dict[object] = i
            }
        }
        fatalError("No valid output")
    }

- (void)findTargerValueIndex:(NSArray *)numberArray target:(NSInteger)target {
    NSMutableDictionary *dictionary = [NSMutableDictionary dictionary];
    [numberArray enumerateObjectsUsingBlock:^(id  _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
        NSInteger index = target - [obj integerValue];
        NSString *string = [dictionary objectForKey:[NSString stringWithFormat:@"%ld",(long)index]];
        if (string == nil) {
            [dictionary setObject:[NSString stringWithFormat:@"%lu",(unsigned long)idx] forKey:obj];
        } else {
            NSLog(@"[inde, i] %ld %ld", [string integerValue], idx);
            *stop = YES;
        }
    }];
}
上一篇 下一篇

猜你喜欢

热点阅读