UVALive - 6439(思维题)

题目链接:https://vjudge.net/contest/241341#problem/F

题目大意:给你一个字符串,你可以用任意单个字符代替其中的一个子串,使它形成一个回文串,要求形成的回文串长度最长。

例如:S=‘ABCADDABCA’这个字符串

你可以令a= ‘ABCA’,b= ‘DD’,则S='aba',长度为3;

你可以令a= ‘ABCA’,b='D',则S=‘abba’,长度为4;

你也可以令a= ‘A’,b= ‘BC’,c= ‘D’,则S=’abaccaba',长度为8;

8即使该字符串形成回文串的最长的长度。

 

解题思路:定义两个空的字符串a,b,一个从长串的头开始往后插入a当中,另一个就是从长串的尾部开始往前插入b当中,只要他们相同计数加2,然后又对它们清空处理,知道中间的位置就行,最后如果字符串不为空,计数还得加1。

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<string.h>
#include<deque>
using namespace std;
const int inf=0x3f3f3f3f;
char s[50005];

int main()
{
    int t;
    cin>>t;
    int kase=0;
    while(t--)
    {
        kase++;
        scanf("%s",s);
        int count=0;
        int len=strlen(s);
        string a,b;
        a="",b="";
        for(int i=0;i<=(len-1)/2;i++)
        {
            a+=s[i];
            b=s[len-i-1]+b;
            if(a==b&&i!=len-i-1)
            {
                count+=2;
                a="";
                b="";
            }
        }
        if(!a.empty()) count++;
        printf("Case #%d: %d\n",kase,count);
    }
    return 0;
}
/*
4
PASTIPAS
ABCADDABCA
MADAMIAMADAM
ACMICPCJAKARTASITE
*/

 

posted @ 2018-07-30 16:31  两点够吗  阅读(187)  评论(0)    收藏  举报