Problem P16. [算法课贪婪]最长回文串

image

求出字符每个出现的个数,出现一对就回文串大小加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;
}
posted @ 2022-09-14 14:06  白缺  阅读(69)  评论(0编辑  收藏  举报