又见回文 (SDUT 2560)

2023-03-09 16:17:43 浏览数 (1)

Problem Description

    “回文串”是一个正读和反读都一样的字符串,比如“level”或者“noon”等等就是回文串。现在呢,就是让你判断输入的字符串是否是回文串。

Input

    有多组输入,每行输入一串字符,保证字符串长度不会大于 100000,字符串由大小写英文字母和空格组成,以字符串“2013”作为结束标志。

Output

    每行输出一个字符串,如果输入是回文串,输出“YES”,否则输出“NO”(注意:判断的时候空格是不作判断的,详见样例)。

Sample Input

代码语言:javascript复制
aaaa
ggg g
lozxvxoMJBCHsTXooXTsHCBJMoxvxzol
i am a good acmer
2013

Sample Output

代码语言:javascript复制
YES
YES
YES
NO

题解:稍微处理一下直接比较就可以了。

代码语言:javascript复制
#include <stdio.h>
#include <string.h>
const int maxn = 100000;
char s[maxn   10];
int main()
{
    int i, j;
    while(gets(s) != '')
    {
        if(strcmp(s, "2013") == 0) return 0;
        int len = strlen(s);
        int f = 0;
        for(i = 0, j = len - 1; i < j;)
        {
            if(s[i] == s[j])   // 相等就继续比较
            {
                i   ;
                j --;
            }
            else if(s[i] == ' ' && s[j] != ' ') // 如果任意在前面或者后面或者前面和后面遇到空格,往后跳一格
            {
                i   ;
            }
            else if(s[i] != ' ' && s[j] == ' ')
            {
                j --;
            }
            else if(s[i] == ' ' && s[j] == ' ')
            {
                i   ;
                j --;
            }
            else            //出现不是回文串的情况
            { 
                f = 1;
                break;
            }
        }
        if(f == 0) printf("YESn");
        else printf("NOn");
    }
    return 0;
}

0 人点赞