美文网首页
无重复最长子串

无重复最长子串

作者: 小白条条 | 来源:发表于2020-09-23 10:40 被阅读0次

/**
*遍历字符串放入数组
*1.当前字符在数组中之前是否出现过
*2.出现过,删除之前一个字符包含它之前的
*3.添加当前字符到数组中
*4.最大值是否>当前无重复字符串数组的元素个数
*/

func lengthOfLongestSubstring(_ s: String) -> Int {
    
    var charArr = Array<Character>()
    var subString = String()
    var maxLength = 0
    for char in s{
        if charArr.contains(char) {
            let oldCharIndex = charArr.firstIndex(of: char)
            charArr.removeFirst(oldCharIndex!+1)
        }
        charArr.append(char)
        
        if charArr.count > maxLength {
            maxLength = charArr.count
            subString = ""
            for char in charArr {
                subString.append(char)
            }
        }
    }
    print(subString)
    return maxLength
}

//调用
print(lengthOfLongestSubstring("pwwkew"))

//运行结果:wke

OC 实现

- (NSUInteger)lengthOfLongestSubstring:(NSString *)s{
    
    //现将字符串拆成数组
    NSMutableArray *charArr = [NSMutableArray array];
    for (int i = 0; i<s.length; i++) {
        NSString *tempStr = [s substringWithRange:NSMakeRange(i, 1)];
        [charArr addObject:tempStr];
    }

    /**需要记录的变量
     *1.过一遍的数组array
     *2.最大长度
     *3.最长的串
     */
    NSMutableArray *array= [NSMutableArray array];
    NSUInteger maxLength = 0;
    NSString *maxLengthSubString = @"";
    
    for (NSString *str in charArr) {
        if ([array containsObject:str]) {
            NSUInteger lastIndex = [array indexOfObject:str];
            [array removeObjectsInRange:NSMakeRange(0, lastIndex+1)];
        }
        [array addObject:str];
        
        if (array.count > maxLength) {
            maxLength = array.count;
            maxLengthSubString = [array componentsJoinedByString:@""];
        }
    }
    NSLog(@"%@",maxLengthSubString);
    return maxLength;
}

相关文章

网友评论

      本文标题:无重复最长子串

      本文链接:https://www.haomeiwen.com/subject/wsbnyktx.html