1040 Longest Symmetric String (25 分)

 

Given a string, you are supposed to output the length of the longest symmetric sub-string. For example, given Is PAT&TAP symmetric?, the longest symmetric sub-string is s PAT&TAP s, hence you must output 11.

Input Specification:

Each input file contains one test case which gives a non-empty string of length no more than 1000.

Output Specification:

For each test case, simply print the maximum length in a line.

Sample Input:

Is PAT&TAP symmetric?

Sample Output:

11

C:

/*
 @Date    : 2017-12-06 19:45:37
 @Author  : 酸饺子 ([email protected])
 @Link    : https://github.com/SourDumplings
 @Version : $Id$
*/

/*
https://www.patest.cn/contests/pat-a-practise/1040
要分奇偶两种情况讨论
*/

#include 
#include 
#include 

int GetOddLength(char s[], int center, int l)
{
    int i;
    int thislength = 3;
    for (i = 2; center - i >= 0; i++)
    {
        if (s[center-i] == s[center+i])
        {
            thislength += 2;
        }
        else
        {
            break;
        }
    }
    return thislength;
}

int GetEvenLength(char s[], int left, int right, int l)
{
    int thislength = 2;
    int i;
    for (i = 1; left - i >= 0 && right + i < l; i++)
    {
        if (s[left-i] == s[right+i])
        {
            thislength += 2;
        }
        else
        {
            break;
        }
    }
    return thislength;
}

int main()
{
    char s[1001];
    gets(s);
    int i;
    int l = strlen(s);
    int thislength = 1, maxlength = 1;
    for (i = 1; i < l - 1; i++)
    {
        if (s[i-1] == s[i+1])
        {
            thislength = GetOddLength(s, i, l);
            if (thislength > maxlength)
            {
                maxlength = thislength;
            }
        }
    }
    for (i = 0; i < l - 1; i++)
    {
        if (s[i] == s[i+1])
        {
            thislength = GetEvenLength(s, i, i+1, l);
            if (thislength > maxlength)
            {
                maxlength = thislength;
            }
        }
    }
    printf("%d\n", maxlength);
    return 0;
}

 

你可能感兴趣的:(PAT甲级真题练习)