1
class Solution {
2
public:
3
int maxRepOpt1(string text) {
4
vector<pair<int, int>> intervals[26];
5
// a: [st, ed], .....
6
for (int i = 0; i < text.size();) {
7
int st = i, ed = i;
8
while (i < text.size() && text[i] == text[st]) {
9
ed = i;
10
i++;
11
}
12
intervals[text[st] - 'a'].push_back({st, ed});
13
}
14

15
int ans = 0;
16
for (int i = 0; i < 26; i++) {
17
for (int j = 0; j < intervals[i].size(); j++) {
18
// 单个的最大值
19
int len1 = intervals[i][j].second - intervals[i][j].first + 1;
20
if (intervals[i].size() > 1) len1++;
21
ans = max(ans, len1);
22

23
// 合并
24
// [1, 2] [4, 6]
25
if (j + 1 < intervals[i].size() &&
26
intervals[i][j].second + 2 == intervals[i][j + 1].first) {
27
int len2 = intervals[i][j].second - intervals[i][j].first + 1 +
28
intervals[i][j + 1].second - intervals[i][j + 1].first + 1;
29
if (intervals[i].size() > 2) { // 一定有一个愿意牺牲
30
len2++;
31
}
32
ans = max(ans, len2);
33
}
34
}
35
}
36

37
return ans;
38
}
39
};
40

41
/**
42
abababababac
43

44
*/

0

WPM •0 •0

100%

ACC •0 •0

0s

TIME •0