給出長為n的數字串,問它存在多少個子串是happy串?happy串指經重排後,可以由兩段同樣的內容連起來拼成,比如12341234。
資料範圍:1<=n<=5E5
雜湊判斷是否相同,只需要判斷各個數字出現的奇偶性即可。
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define rep(i,a,b) for(int i=a; i<=b; i++)
#define per(i,a,b) for(int i=b; i>=a; i--)
struct node {
int cnt[10];
node() {
rep(i,0,9) cnt[i] = 0;
}
void add(int x) {
cnt[x] += 1;
cnt[x] %= 2;
}
int encode() {
int h = 0;
rep(i,0,9) {
h = h * 3 + cnt[i];
}
return h;
}
};
map<int,int> cnt;
string s;
void solve() {
cin >> s;
node nd;
int ans = 0;
cnt[0] = 1;
for (auto c : s) {
nd.add(c-'0');
int k = nd.encode();
ans += cnt[k];
cnt[k] += 1;
}
cout << ans << "\n";
}
signed main() {
cin.tie(0)->sync_with_stdio(0);
int t = 1;
while (t--) solve();
return 0;
}