-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathstrontium2019.py
74 lines (55 loc) · 2.07 KB
/
strontium2019.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
#solution review:
#https://app.codility.com/demo/results/trainingMQ99AS-3KS/
from string import ascii_lowercase as letters
from itertools import groupby
def solution(words):
P1 = {c : 0 for c in letters}
P2 = {c : 0 for c in letters}
S1 = {c : 0 for c in letters}
S2 = {c : 0 for c in letters}
EQ = {c : 0 for c in letters}
MM = {c : 0 for c in letters}
PS = {c : False for c in letters}
for word in words:
g = [
(ltr, sum(1 for _ in group))
for ltr, group in groupby(word)
]
if len(g) == 1:
ltr, length = g[0]
EQ[ltr] += length
continue
maxLtr, maxLength = max(g, key=lambda c: c[1])
MM[maxLtr] = max(MM[maxLtr], maxLength)
prefixLtr, prefixLength = g[0]
suffixLtr, suffixLength = g[-1]
isMaxPrefix = False
isMaxSuffix = False
if prefixLength >= P1[prefixLtr]:
P2[prefixLtr] = P1[prefixLtr]
P1[prefixLtr] = prefixLength
PS[prefixLtr] = False
isMaxPrefix = True
elif prefixLength > P2[prefixLtr]:
P2[prefixLtr] = prefixLength
if suffixLength >= S1[suffixLtr]:
S2[suffixLtr] = S1[suffixLtr]
S1[suffixLtr] = suffixLength
PS[suffixLtr] = False
isMaxSuffix = True
elif suffixLength > S2[suffixLtr]:
S2[suffixLtr] = suffixLength
if (isMaxPrefix and
isMaxSuffix and
prefixLtr == suffixLtr):
PS[prefixLtr] = True
res = 0
for ltr in letters:
if PS[ltr]:
v1 = P1[ltr] + S2[ltr]
v2 = P2[ltr] + S1[ltr]
z = max(v1, v2) + EQ[ltr]
else:
z = P1[ltr] + S1[ltr] + EQ[ltr]
res = max(z, MM[ltr], res)
return res