【分析】给一串字符串 ,问最少改变多少个字符使得任意奇数长度的字符串均为回文串。
1. 任意奇数长度的字符串,即一定有a[1]=a[3]=a[5]=a[7]=...,a[2]=a[4]=a[6]=a[8]=...
2. 故,写两个循环,分别统计奇数位和偶数位的每个字符的个数,找出两个循环的最大个数(即重复次数最多的字符),用字符串的总长度-两个最大数的和,即为答案。
3. 一开始想把算maxx写到循环里面,可是这样会WA,不明白为什么。。。所以把它拿出来,再写循环来统计,就可以A了。
#include<bits/stdc++.h>
using namespace std;
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
string s;
int b[30];
cin>>s;
int maxx=-999,cnt=0;
int len=s.length();
memset(b,0,sizeof(b));
for(int i=0;i<len;i+=2)
b[s[i]-'a']++;
for(int i=0;i<26;i++)
maxx=max(maxx,b[i]);
cnt+=maxx;
maxx=-999;
memset(b,0,sizeof(b));
for(int i=1;i<len;i+=2)
b[s[i]-'a']++;
for(int i=0;i<26;i++)
maxx=max(maxx,b[i]);
cnt+=maxx;
cout<<len-cnt<<endl;
}
return 0;
}