#include <bits/stdc++.h>
using ll = long long;
using namespace std;
const int MAXN = 300005;
string s;
int a, b, c;
map<ll, int> cnt3;
ll res = 0;
ll id (int a, int b, int c) {
return 1LL * (a + MAXN) * MAXN * MAXN + 1LL * (b + MAXN) * MAXN + (c + MAXN);
}
int32_t main() {
ios_base::sync_with_stdio(0);
cin >> s;
// 1 distinct letter.
int j = 0;
while (j < s.size()) {
int k = 0;
while (j + k + 1 < s.size() && s[j] == s[j + k + 1])
k++;
while (k >= 0) {
res += k + 1;
j++;
k--;
}
}
// 3 distinct letters.
cnt3[id(0, 0, 0)]++;
for (auto i : s) {
if (i == 'a') {
a++, c--;
} else if (i =='b') {
a--, b++;
} else {
b--, c++;
}
res += cnt3[id(a, b, c)]++;
}
// 2 distinct letters.
for (char l = 'a'; l <= 'b'; l++) {
for (char r = l + 1; r <= 'c'; r++) {
ll sum = 0;
map<ll, int> cnt = {{0, 1}};
for (auto i : s) {
if (i == l) {
sum++;
} else if(i == r) {
sum--;
} else {
sum += 300001;
}
res += cnt[sum]++;
}
}
}
cout << res << "\n";
}
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 | #include <bits/stdc++.h> using ll = long long; using namespace std; const int MAXN = 300005; string s; int a, b, c; map<ll, int> cnt3; ll res = 0; ll id (int a, int b, int c) { return 1LL * (a + MAXN) * MAXN * MAXN + 1LL * (b + MAXN) * MAXN + (c + MAXN); } int32_t main() { ios_base::sync_with_stdio(0); cin >> s; // 1 distinct letter. int j = 0; while (j < s.size()) { int k = 0; while (j + k + 1 < s.size() && s[j] == s[j + k + 1]) k++; while (k >= 0) { res += k + 1; j++; k--; } } // 3 distinct letters. cnt3[id(0, 0, 0)]++; for (auto i : s) { if (i == 'a') { a++, c--; } else if (i =='b') { a--, b++; } else { b--, c++; } res += cnt3[id(a, b, c)]++; } // 2 distinct letters. for (char l = 'a'; l <= 'b'; l++) { for (char r = l + 1; r <= 'c'; r++) { ll sum = 0; map<ll, int> cnt = {{0, 1}}; for (auto i : s) { if (i == l) { sum++; } else if(i == r) { sum--; } else { sum += 300001; } res += cnt[sum]++; } } } cout << res << "\n"; } |
English