Skip to content

Commit 04f99d7

Browse files
committed
2981. Find Longest Special Substring That Occurs Thrice I
1 parent 1e50cb1 commit 04f99d7

File tree

1 file changed

+63
-0
lines changed

1 file changed

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

0 commit comments

Comments
 (0)