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
}
}