Problem P16. [算法课贪婪]最长回文串
求出字符每个出现的个数,出现一对就回文串大小加2,出现落单的一个就存起来。计算完所有一对的字符之后,如果之前有保存有落单的字符,那么最后的回文串大小加1,得到最大回文串的长度。
#include<iostream>
#include<bits/stdc++.h>
#include<cstdio>
using namespace std;
int as[205]={0};
int main()
{
string str;
cin >> str;
for (int i = 0; i < str.length(); i++){
as[str[i]]++;
}
int ou = 0, ji = 0;
for (int i = 0; i < 205; i++){
int x = as[i]/2;
int y = as[i]%2;
ou += x;
ji += y;
}
int sum = 0;
sum += ou*2;
if (ji>0){
sum++;
}
cout << sum;
return 0;
}