A: Super_palindrome

题面:给出一个字符串,求改变最少的字符个数使得这个串所有长度为奇数的子串都是回文串

思路:显然,这个字符串肯定要改成所有奇数位相同并且所有偶数位相同

那统计一下奇数位上哪个字符出现的个数最多,偶数位上哪个字符出现的个数最多

答案就是 n 减去它们

 1 #include <bits/stdc++.h>
 2 
 3 using namespace std;
 4 
 5 #define N 110
 6 #define INF 0x3f3f3f3f
 7 
 8 int t;
 9 char s[N];
10 
11 int odd[200];
12 int even[200];
13 
14 int main()
15 {
16     scanf("%d", &t);
17     while (t--)
18     {
19         scanf("%s", s);
20         memset(odd, 0, sizeof odd);
21         memset(even, 0, sizeof even);
22         int len = strlen(s);
23         int Maxodd = 0, Maxeven = 0;
24         for (int i = 0; i < len; ++i)
25         {
26             if (i & 1)
27                 odd[s[i]]++, Maxodd = max(Maxodd, odd[s[i]]);
28             else
29                 even[s[i]]++, Maxeven = max(Maxeven, even[s[i]]);
30         }
31         printf("%d\n", len - Maxodd - Maxeven);
32     }
33     return 0;
34 }
View Code

相关文章: