给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。
示例 1:
输入: "abcabcbb"
输出: 3
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。
示例 2:
输入: "bbbbb"
输出: 1
解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。
示例 3:
输入: "pwwkew"
输出: 3
解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。
请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。
func lengthOfLongestSubstring(_ s: String) -> [String] {
guard s.count > 1 else {
return [s]
}
//存储旧的最长字符
var arr = [String]()
var tmp = [String]()
var index = 0
while index < s.count {
let startIndex = s.index(s.startIndex, offsetBy: index)
let endIndex = s.index(s.startIndex, offsetBy: index + 1)
let subString = s[startIndex ..< endIndex]
let str = String(subString)
index += 1
if tmp.contains(str) == true {
let i = tmp.firstIndex(of: str)!
//出现了重复字符,与旧的相比,如果比旧的长则替换,比旧的短则不变
if arr.count < tmp.count {
arr = tmp
}
//删除<=重复位置的字符
let range = Range(NSRange(location: 0, length: i + 1))!
tmp.removeSubrange(range)
}
//添加新的b字符
tmp += [str]
}
//循环结束后,再与旧的对比一次,选出最长的返回
if arr.count < tmp.count {
arr = tmp
}
return arr;
}
//let arr = lengthOfLongestSubstring("abcabcbb")
//let arr = lengthOfLongestSubstring("bbbbb")
let arr = lengthOfLongestSubstring("pwwkew")
print("arr: \(arr)\ncount: \(arr.count)")
网友评论