美文网首页
leetcode-3.无重复字符的最长子串(OC)

leetcode-3.无重复字符的最长子串(OC)

作者: money_ac9e | 来源:发表于2022-01-24 18:18 被阅读0次

无重复字符的最长子串

地址:https://leetcode-cn.com/problems/longest-substring-without-repeating-characters/

给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。

示例 1:
输入: s = "abcabcbb"
输出: 3
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。

示例 2:
输入: s = "bbbbb"
输出: 1
解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。

示例 3:
输入: s = "pwwkew"
输出: 3
解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。
请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。

示例 4:
输入: s = ""
输出: 0

方法1 滑动窗口法

遍历 从字符串的第0个字符开始 查找没有重复的

- (NSInteger)lengthOfLongestSubstring:(NSString *)s
{
    //1.字符串的长度
    NSInteger length = s.length;
    
    //2.字典 存储已经检查的没有重复的字符  value对应下标
    NSMutableDictionary *params = [NSMutableDictionary dictionary];
    
    //3.表示没有重复的最大长度
    NSInteger cs = 0;
    //从这个下标开始查找里面是否有重复的 这里注意找到了重复的
    NSInteger k = -1;
    
    //4.循环
    for (int i=0; i<length; i++) {
                
        NSString *c = [NSString stringWithFormat:@"%c",[s characterAtIndex:i]];
        
        //判断字典中有没有 没有存入 有的话取出作为下标
        if ([params.allKeys containsObject:c]) {
            NSNumber *index = params[c];
            k = k >= index.integerValue ? k : index.integerValue;
        }
        
        [params setValue:@(i) forKey:c];
        cs = cs >= i - k? cs : i - k;
    }
        
    return cs;
}

相关文章

网友评论

      本文标题:leetcode-3.无重复字符的最长子串(OC)

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