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

无重复字符的最长子串

作者: 那一年的北海 | 来源:发表于2020-02-11 11:09 被阅读0次

    题目:

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

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

    答案:

    class Solution {
        func lengthOfLongestSubstring(_ s: String) -> Int {
            if s.count == 0 {
                return 0
            }
            // 创建一个字典缓存字符和该字符的相对位置
            var dic = Dictionary<Character, Int>()
            // 最大子串的长度
            var maxLength = 0
            // 当前字符位置
            var index = 0
            // 新子串的开始位置
            var startIndex = 0
            
            for ch in s {
                if let i = dic[ch] {
                    // 出现重复啦,记录重复的字符的下一个位置(因为,dic存的就是下一个位置)
                    // 该位置作为新的子串起始点
                    startIndex = max(i, startIndex)
                }
                // 先 加1
                index += 1
                // 这个字符对应的值,就是这个字符的下一个位置
                dic[ch] = index
                // index - startIndex 意思是,新子串的长度
                maxLength = max(maxLength, index - startIndex)
            }
            return maxLength
        }
    }
    

    相关文章

      网友评论

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

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