首页 无重复字符的最长子串
文章
取消

无重复字符的最长子串

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

示例 1:

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

示例 2:

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

示例 3:

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

思路

逐个检查所有的子字符串,看它是否不含有重复的字符。

代码实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
class LengthOfLongestSubstring {
    
    func lengthOfLongestSubstring(_ s: String) -> Int {
        
        var longest = 0
        var index = 0           // 起点
        var set = Set<Character>()
        let sChars = Array(s)
        for (i, char) in sChars.enumerated() {
            
            if set.contains(char) {
  
                longest = max(longest, i - index)
                while sChars[index] != char {
                    set.remove(sChars[index])
                    index += 1
                }
                index += 1
            } else {
                
                set.insert(char)
            }
        }
        return max(longest, sChars.count - index)
    }
}

源码地址

本文由作者按照 CC BY 4.0 进行授权

两数相加

寻找两个有序数组的中位数