比赛题目:
http://acm.hdu.edu.cn/downloads/CCPC2018-Hangzhou-ProblemSet.pdf
http://acm.hdu.edu.cn/downloads/CCPC2018-Hangzhou-ProblemSet.pdf
#include<iostream>
#include<string>
#include<map>
#include<algorithm>
using namespace std;
/*
* 题意是求令所有奇数长度的子串都是回文的最小改动次数。
* 理解了就知道是求令偶数下标与奇数下标都是同一个字母的最小改动次数。
* 显然,分别统计奇数和偶数下标最多的字母数量,长度减去两者之和就可以求出要改动的次数。
* */
string s;
map<char,int> num;
int kc(int x)
{ num.clear();
for(int i=x;i<s.length();i=i+2)//统计奇数偶数下标的字母数量
{
num[s[i]]++;
}
map<char,int>::iterator it;
int ans=0;
for(it=num.begin();it!=num.end();it++){
//cout<<it->second<<endl;
ans=max(it->second,ans);//求出最大的字母数量
}
return ans;
}
int main()
{
std::ios::sync_with_stdio(false);
int t;
cin>>t;
while (t--) {
cin>>s;
int res=(s.length()+1)/2-kc(0)+s.length()/2-kc(1);//可以改成s.length()-kc(0)-kc(1)
cout<<res<<endl;
}
return 0;
}