leetcode3

2021-07-14  本文已影响0人  大写的空气

给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。
示例 1:
输入: s = "abcabcbb"
输出: 3
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。

使用系统相关方法

func lengthOfLongestSubstring(_ s: String) -> Int {
        var curArray = [Character]()  //当前正在遍历的无重复字符串
        var maxArray:[Character]? //最长子串

        for c in s {
            if !curArray.contains(c) {  //不存在此字符,加入
                curArray.append(c)
            }else{
                if maxArray == nil || curArray.count > maxArray!.count {
                    maxArray = curArray
                }
                
                curArray.removeSubrange(0 ... curArray.firstIndex(of: c)! )
                curArray.append(c)
            }
        }
        if maxArray == nil || curArray.count > maxArray!.count { //所有字符串都无重复字符
            maxArray = curArray
        }
       
        return maxArray!.count
    }

另一解法

func lengthOfLongestSubstring(_ s: String) -> Int {
        if s.count < 2 {
            return s.count
        }
        var length = 0
        var left = 0, right = 1
        var i = 0
        let array = Array(s.utf8)
        while right < array.count {
            i = left
            while i < right {
                if array[i] == array[right] {
                    left = i + 1  //左边指向下一个不重复的字符串
                    break
                }
                i += 1
            }
            length = max(length, right-left+1)
            right += 1
        }
        
        return length
    }
上一篇 下一篇

猜你喜欢

热点阅读