从后往前遍历,遍历到i位置时,统计大于i的字符中,有哪些字符是不等于s[i],并且数量大于等于2的。如果数量大雨等于2,那么这些字符都可以和i位置的字符组成abb的格式。
使用一个数组统计,从后往前遍历一遍既可得到答案。
#include <bits/stdc++.h> using namespace std; int main() { int n; cin >> n; string s; cin >> s; vector<int> a(26, 0); long long ans = 0; for (int i = n - 1; i >= 0; i--) { for (int j = 0; j < 26; j++) { if (j == s[i] - 'a') continue; else if (a[j] >= 2) ans += (a[j] * 1LL * (a[j] - 1)) / 2; } a[s[i] - 'a']++; } cout << ans << '\n'; } // 64 位输出请用 printf("%lld")