0003 Longest Substring Without Repeating Characters
Warning
This post is more than a year old. Information may be outdated.
Solved at: 230130 Longest Substring Without Repeating Characters - LeetCode
Question
Given a string s, find the length of the longest substring without repeating characters.
Solution
class Solution {
func lengthOfLongestSubstring(_ s: String) -> Int {
var maxLength = 0
var substring = ""
for (idx, char) in s.enumerated() {
var candidate = substring + String(char)
while candidate.count != Set(candidate).count {
candidate = String(candidate[String.Index(encodedOffset: 1)...])
}
if candidate.count > maxLength {
maxLength = candidate.count
}
substring = candidate
}
return maxLength
}
}
Results
- Time taken: 6 m 48 s
- Runtime 645 ms, Beats 9.21%
- Memory 14.8 MB, Beats 43.95%
Complexity Analysis
We can use an array to make this $O(N^2)$
We can replace candidate.count != Set(candidate).count to using Sets to check in $O(N)$ time, given at one given point substring must have distinct characters.
Takeaways
Using constant array with alphabets as an index can also replace set.