这道题很考验思维。
这道题目我们只需要考虑出现次数最多的字符的个数,分两种情况讨论。
1、如果该字符出现次数超过n/2(这里设为x),那么其他字符和该字符凑成一对进行消除,即剩下的长度为2x-n。
2、如果该字符出现次数低于n/2,那么对于任意字符都有足够的其余字符和他凑成一对进行消除,那么就变成了长度问题。
这种情况下:当总字符串长度为奇数时,两两消除最终会剩下一个;当总字符串长度为偶数时,两两消除最终剩下空串。
主要代码:
#include<bits/stdc++.h> using namespace std; int main(){ int t; cin>>t; while (t--){ int n,max=0; cin>>n; cin.get(); map<char,int> map1; for (int i=0;i<n;i++){map1[getchar()]++;} for (map<char,int>::iterator i=map1.begin();i!=map1.end();i++) if ((i->second)>max) max=i->second; if (max<=n/2) printf("%d\n",n%2); else printf("%d\n",2*max-n); } return 0; }