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
75
76
77
78
79
80
81
|
const ll MOD = 998244353;
void solve() {
string s;
cin >> s;
int n = sz(s);
int l1 = 0, r1 = n - 1;
while (l1 <= r1 && s[l1] == s[r1]) {
l1++, r1--;
}
if (l1 > r1) {
cout << 0 << endl;
return;
}
string tem = s.substr(l1, r1 - l1 + 1);
int m = sz(tem);
int l = 2, r = m, ans = 2, mid;
auto check = [&](int mid) -> bool {
if (mid > m / 2) {
vi tem2(26);
vi tem3(26);
rep(i, 0, mid - 1) tem2[tem[i] - 'a']++;
rep(i, mid, m - 1) tem3[tem[i] - 'a']++;
bool flag = true;
rep(i, 0, 25) {
if (tem2[i] >= tem3[i])
continue;
else
flag = false;
}
if (flag) return true;
flag = true;
rep(i, 0, 25) tem2[i] = 0, tem3[i] = 0;
rep(i, m - mid, m - 1) tem2[tem[i] - 'a']++;
rep(i, 0, m - mid - 1) tem3[tem[i] - 'a']++;
rep(i, 0, 25) {
if (tem2[i] >= tem3[i] && (tem2[i] - tem3[i]) % 2 == 0)
continue;
else
flag = false;
}
return flag;
} else {
rep(i, mid, m / 2 - 1) {
if (tem[i] != tem[m - 1 - i]) return false;
}
vi tem2(26);
vi tem3(26);
rep(i, 0, mid - 1) tem2[tem[i] - 'a']++;
rep(i, m - mid, m - 1) tem3[tem[i] - 'a']++;
bool flag = true;
rep(i, 0, 25) {
if (tem2[i] == tem3[i])
continue;
else
flag = false;
}
if (flag) return true;
flag = true;
rep(i, 0, 25) tem2[i] = 0, tem3[i] = 0;
rep(i, 0, mid - 1) tem3[tem[i] - 'a']++;
rep(i, m - mid, m - 1) tem2[tem[i] - 'a']++;
rep(i, 0, 25) {
if (tem2[i] == tem3[i])
continue;
else
flag = false;
}
return flag;
}
};
while (l <= r) {
mid = (l + r) / 2;
if (check(mid)) {
ans = mid;
r = mid - 1;
} else
l = mid + 1;
}
cout << ans << endl;
return;
}
|