Skip to content

Commit 301c6df

Browse files
committed
[String] Refactor solution to Longest Substring with At Most K Distinct Characters
1 parent 45126d3 commit 301c6df

File tree

1 file changed

+12
-16
lines changed

1 file changed

+12
-16
lines changed

String/LongestSubstringMostKDistinctCharacters.swift

Lines changed: 12 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -10,30 +10,26 @@
1010

1111
class LongestSubstringMostKDistinctCharacters {
1212
func lengthOfLongestSubstringKDistinct(_ s: String, _ k: Int) -> Int {
13-
var start = 0, longest = 0, charsFreq = [Character: Int]()
14-
let sChars = Array(s)
15-
1613
guard k > 0 else {
17-
return longest
14+
return 0
1815
}
1916

20-
for (i, char) in sChars.enumerated() {
17+
let s = Array(s)
18+
var start = 0, longest = 0, charsFreq = [Character: Int]()
19+
20+
for (i, char) in s.enumerated() {
2121
if let freq = charsFreq[char] {
2222
charsFreq[char] = freq + 1
2323
} else {
24-
if charsFreq.count == k {
25-
longest = max(longest, i - start)
24+
while charsFreq.count == k {
25+
longest = max(i - start, longest)
2626

27-
while charsFreq.count == k {
28-
let charStart = sChars[start]
29-
charsFreq[charStart]! -= 1
30-
31-
if charsFreq[charStart] == 0 {
32-
charsFreq[charStart] = nil
33-
}
34-
35-
start += 1
27+
guard let freq = charsFreq[s[start]] else {
28+
fatalError()
3629
}
30+
charsFreq[s[start]] = freq == 1 ? nil : freq - 1
31+
32+
start += 1
3733
}
3834

3935
charsFreq[char] = 1

0 commit comments

Comments
 (0)