每日刷题--3. 无重复字符的最长子串

96 阅读1分钟

3. 无重复字符的最长子串

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

思路:

滑动窗口

假设我们选择字符串中的第 kk 个字符作为起始位置,并且得到了不包含重复字符的最长子串的结束位置为 r_kr k​。那么当我们选择第 k+1k+1 个字符作为起始位置时,首先从 k+1k+1 到 r_kr k​ 的字符显然是不重复的,并且由于少了原本的第 kk 个字符,我们可以尝试继续增大 r_kr k​,直到右侧出现了重复字符为止。

func lengthOfLongestSubstring(_ s: String) -> Int {

        if s.count == 0 {

            return 0

        }

        var maxStr = ""

        var currentStr = ""

        for char in s {

            while currentStr.contains(char) {

                currentStr.remove(at: currentStr.startIndex)

            }

            currentStr.append(char)

            if currentStr.count > maxStr.count {

                maxStr = currentStr

            }

        }

        return maxStr.count

    }

牛人思路 作者:6reat-shavv 来源:力扣(LeetCode) 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

class Solution {
    func lengthOfLongestSubstring(_ s: String) -> Int {
        if(s == ""){
            return 0
        }
        var maxCount = 0
        var curStr = String()
        for char in s {
            if let index = curStr.firstIndex(of: char) {
                let nextIndex = curStr.index(index, offsetBy: 1)
                curStr = String(curStr[nextIndex...])
            }
            curStr.append(char)
            if(curStr.count > maxCount) {
                maxCount = curStr.count
            }
        }
        return maxCount
    }
}