一道很有意思的题,但是思考以后就会发现,绝对不会出现一对相邻的字符不相同,因为不相同且相邻的都消掉了,所以就找最多出现次数的那一个字符。
如果最多出现的字符超过了字符总数的一半,那么这个字符串的长度只能是该字符的数量减去其余字符的总数,因为如果要保证最短的话,其余字符都要带走一个该字符。消减完以后的字符串里面一定只剩最多出现的那个字符了
如果出现的字符数小于等于字符总数的一半,那么就直接把字符总数对2取余即可。其余字符每一个都和一个最大出现次数的字符相消。
#include<bits/stdc++.h>
using namespace std;
int cnt[27];
int main(){
int t; cin>>t;
while(t--){
memset(cnt,0,sizeof(cnt));
int n; cin>>n;
string s; cin>>s;
for(int i=0;i<s.size();i++){
cnt[s[i]-'a']++;
}
int maxn=0;
for(int i=0;i<26;i++){
maxn=max(maxn,cnt[i]);
}
if(maxn*2<=n){
cout<<n%2<<'\n';
}
else{
cout<<maxn-(n-maxn)<<'\n';
}
}
return 0;
}