A - Super-palindrome(思维题)
题意:
给你一个字符串,现在让你修改其中的字母让其变为特殊回文串。特殊回文串也就是字符串的子串为奇数位时,字串为回文串。现在求字符串中修改字母的最小次数。
思路:
字符串的子串为奇数位时,字串为回文串。只有两种情况,
1.要么aaaaaaa型
2.要么abababa型
也就是字符串的奇数位必须为相同字母,字符串的偶数位也为相同字母。用两个数组分别来存奇数位和偶数位字母出现的次数。把出现次数最高的字母找出来,用总长度减去奇数出现字母的最多次数和偶数出现字母的最多次数就ok。。。
AC代码:
#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
char ch[105];
int a[30], b[30];
bool cmp(int a, int b)
{
return a > b;
}
int main()
{
int n;
cin >> n;
while(n--) {
scanf("%s", ch);
int len = strlen(ch);
int ans = 0;
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
for(int i = 0; i < len; i += 2) {
a[ch[i] - 'a']++;
}
for(int i = 1; i < len; i += 2) {
b[ch[i] - 'a']++;
}
sort(a,a+26,cmp);
sort(b,b+26,cmp);
cout << len - a[0] - b[0] << endl;
}
return 0;
}