一浮庐、題目
給定一個字符串揖闸,找出不含有重復字符的最長子串的長度账胧。
示例 1:
輸入: "abcabcbb"
輸出: 3
解釋: 無重復字符的最長子串是 "abc",其長度為 3落蝙。
示例 2:
輸入: "bbbbb"
輸出: 1
解釋: 無重復字符的最長子串是 "b"织狐,其長度為 1。
示例 3:
輸入: "pwwkew"
輸出: 3
解釋: 無重復字符的最長子串是 "wke"筏勒,其長度為 3移迫。
請注意,答案必須是一個子串管行,"pwke" 是一個子序列 而不是子串厨埋。
二、題解
根據(jù)示例可以找到規(guī)律捐顷,可以通過遍歷字符串荡陷,創(chuàng)建一個數(shù)組,將遍歷的字符添加進數(shù)組迅涮,添加前废赞,需要判斷該字符是否已經(jīng)在數(shù)組中,如果存在叮姑,需要將該字符之前的字符丟棄唉地,然后將該字符添加到數(shù)組中,每次遍歷前传透,判斷數(shù)組中的子串長度是否是最長的耘沼,最后返回max。
三朱盐、代碼示例
class Solution {
func lengthOfLongestSubstring(_ s: String) -> Int {
// 數(shù)組用于保存子串
var list:[Character] = []
// 用于保存最大子串的長度
var m: Int = 0
// 遍歷字符串
for sub in s {
// 先獲取最大的子串長度
m = max(m, list.count) as Int
// 如果子串中存在該字符耕拷,則刪除數(shù)組中該字符之前的所有字符(包括該字符)
if let index = list.firstIndex(of: sub) {
list.removeSubrange(Range.init(NSRange.init(location: 0, length: index + 1))!)
}
// 將字符添加到子串數(shù)組中
list.append(sub)
}
return max(m, list.count) as Int
}
}
Demo地址:github