無重復字符的最長子串

題目:

給定一個字符串,請你找出其中不含有重復字符的 最長子串 的長度。

  • 示例 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
        }
        // 創(chuàng)建一個字典緩存字符和該字符的相對位置
        var dic = Dictionary<Character, Int>()
        // 最大子串的長度
        var maxLength = 0
        // 當前字符位置
        var index = 0
        // 新子串的開始位置
        var startIndex = 0
        
        for ch in s {
            if let i = dic[ch] {
                // 出現(xiàn)重復啦,記錄重復的字符的下一個位置(因為,dic存的就是下一個位置)
                // 該位置作為新的子串起始點
                startIndex = max(i, startIndex)
            }
            // 先 加1
            index += 1
            // 這個字符對應的值,就是這個字符的下一個位置
            dic[ch] = index
            // index - startIndex 意思是,新子串的長度
            maxLength = max(maxLength, index - startIndex)
        }
        return maxLength
    }
}
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容