1
class Solution {
2
public int maxRepOpt1(String s) {
3
int[] count = new int[26];
4
int[] left = new int[s.length()];
5
int[] right = new int[s.length()];
6
int max = 0;
7
// Left Array Containing Length Of Subarray Having Equal Characters Till That Index
8
for (int i = 0; i < s.length(); i++) {
9
count[s.charAt(i) - 'a']++;
10
if (i > 0) {
11
if (s.charAt(i) == s.charAt(i - 1)) {
12
left[i] = left[i - 1] + 1;
13
} else {
14
left[i] = 1;
15
}
16
} else {
17
left[i] = 1;
18
}
19
max = Math.max(max, left[i]);
20
}
21
// Right Array Containing Length Of Subarray Having Equal Characters Till That Index
22
for (int i = s.length() - 1; i >= 0; i--) {
23
if (i < s.length() - 1) {
24
if (s.charAt(i + 1) == s.charAt(i)) {
25
right[i] = right[i + 1] + 1;
26
} else {
27
right[i] = 1;
28
}
29
} else {
30
right[i] = 1;
31
}
32
}
33
// Count The Length Of SubString Having Maximum Length When A Character Is Swapped
34
for (int i = 1; i < s.length() - 1; i++) {
35
if (s.charAt(i - 1) == s.charAt(i + 1) && s.charAt(i) != s.charAt(i - 1)) {
36
if (count[s.charAt(i - 1) - 'a'] == left[i - 1] + right[i + 1]) {
37
max = Math.max(max, left[i - 1] + right[i + 1]);
38
} else {
39
max = Math.max(max, left[i - 1] + right[i + 1] + 1);
40
}
41
} else {
42
if (count[s.charAt(i) - 'a'] == left[i]) {
43
max = Math.max(max, left[i]);
44
} else {
45
max = Math.max(max, left[i] + 1);
46
}
47
}
48
}
49
if (count[s.charAt(s.length() - 1) - 'a'] != left[s.length() - 1]) {
50
max = Math.max(max, left[s.length() - 1] + 1);
51
}
52
return max;
53
}
54
}

0

WPM •0 •0

100%

ACC •0 •0

0s

TIME •0