给定一个字符串 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
}
网友评论