leetcode地址
func lengthOfLongestSubstring(_ s: String) -> Int {
if s.count == 0 { return 0 }
//使用-1填充避免和第0位字符冲突,128种字符
var dp = Array(repeating:-1,count:128)
let s = Array(s)
var res = 0,i = 0
//i到j 为没有重复字符的字符串 , res记录出现过的最大长度
//dp[t] 为记录的最后一个出现的s[j]的位置
for j in 0 ..< s.count {
let t = Int(s[j].unicodeScalars.first!.value)
// j必定 >= i , dp[t] < i 表示在 i和j之间没有出现过s[j]
if dp[t] < i {
//i到j没有重复字符,更新res
res = max(res,j-i+1)
}else{
// i和j之间出现过s[j],i挪到d[t]之后一位
i = dp[t] + 1
}
//记录为值为j的字符最后一次出现的位置
dp[t] = j
}
return res
}