省赛热身赛9--A. Super-palindrome(找规律)

【分析】给一串字符串 ,问最少改变多少个字符使得任意奇数长度的字符串均为回文串。

  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;
}

猜你喜欢

转载自blog.csdn.net/qq_38735931/article/details/81988032