1
/**
2
* @param {string} text
3
* @return {number}
4
*/
5

6
const getLast = (ar) => ar[ar.length - 1];
7
var maxRepOpt1 = function (text) {
8
let freq = {};
9

10
// compute frequency map
11
for (let i = 0; i < text.length; i++) {
12
let e = text[i];
13
!freq[e] && (freq[e] = 0);
14
freq[e]++;
15
}
16

17
let segments = [];
18
segments.push({
19
v: text[0],
20
c: 1,
21
});
22

23
let max = 1;
24
for (let i = 1; i < text.length; i++) {
25
let e = text[i];
26
let last = getLast(segments);
27

28
if (last.v == e) {
29
last.c++;
30
max = Math.max(max, last.c);
31
} else {
32
segments.push({ v: e, c: 1 });
33
}
34
}
35

36
for (let i = 0, len = segments.length; i < len; i++) {
37
let { v, c } = segments[i];
38
if (freq[v] > c) {
39
// x x a , a x x , x a x
40
max = Math.max(max, c + 1);
41
}
42
if (i + 2 < len && v == segments[i + 2].v) {
43
// x a x a x a x a x x a x a
44
let sum = c + segments[i + 2].c;
45
if (segments[i + 1].c == 1) {
46
if (freq[v] > sum) {
47
max = Math.max(max, 1 + sum);
48
} else {
49
max = Math.max(max, sum);
50
}
51
}
52
}
53
}
54

55
return max;
56
};

0

WPM •0 •0

100%

ACC •0 •0

0s

TIME •0