Skip to content

Commit 9b712a2

Browse files
committed
2982. Find Longest Special Substring That Occurs Thrice II
1 parent 04f99d7 commit 9b712a2

File tree

1 file changed

+59
-0
lines changed

1 file changed

+59
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
class Solution {
2+
3+
// Solution by Sergey Leschev
4+
// 2982. Find Longest Special Substring That Occurs Thrice II
5+
6+
// Time complexity: O(N)
7+
// Space complexity: O(1)
8+
9+
func maximumLength(_ s: String) -> Int {
10+
var count = 0
11+
var last = s.first!
12+
var ans = 0
13+
var ump = [Character: [Int]]()
14+
15+
for char in s {
16+
if char == last {
17+
count += 1
18+
} else {
19+
ump[last, default: []].append(count)
20+
21+
if ump[last]!.count >= 4 {
22+
ump[last]?.sort(by: >)
23+
ump[last]?.removeLast()
24+
}
25+
26+
count = 1
27+
last = char
28+
}
29+
}
30+
31+
ump[last, default: []].append(count)
32+
33+
for (_, v) in ump {
34+
var l1 = 0
35+
var l2 = 0
36+
var l3 = 0
37+
38+
for e in v {
39+
if l1 < e {
40+
(l3, l2, l1) = (l2, l1, e)
41+
} else if l2 < e {
42+
(l3, l2) = (l2, e)
43+
} else if l3 < e {
44+
l3 = e
45+
}
46+
}
47+
48+
if l1 == l2 && l1 > l3 {
49+
l2 -= 1
50+
}
51+
52+
if l1 + l2 + l3 >= 3 {
53+
ans = max(ans, l1 - 2, l2)
54+
}
55+
}
56+
57+
return ans != 0 ? ans : -1
58+
}
59+
}

0 commit comments

Comments
 (0)