又见回文
Time Limit: 1000 ms
Memory Limit: 65536 KiB
Problem Description
“回文串”是一个正读和反读都一样的字符串,比如“level”或者“noon”等等就是回文串。现在呢,就是让你判断输入的字符串是否是回文串。
Input
有多组输入,每行输入一串字符,保证字符串长度不会大于 100000,字符串由大小写英文字母和空格组成,以字符串“2013”作为结束标志。
Output
每行输出一个字符串,如果输入是回文串,输出“YES”,否则输出“NO”(注意:判断的时候空格是不作判断的,详见样例)。
Sample Input
aaaa ggg g lozxvxoMJBCHsTXooXTsHCBJMoxvxzol i am a good acmer 2013
Sample Output
YES YES YES NO
Hint
Source
fenggang
#include<bits/stdc++.h>
using namespace std;
int main()
{
string s;
while(getline(cin,s)&&s!="2013")
{
int l=s.length(),i,j=l-1;
for(i=0;i<l/2;i++)//从字符串两头开始一一对比
{
if(s[i]!=s[j-i])//这里的j-i整体就相当于是从右开始的是s的下标
{
if(s[i]==' ')//若字符串左边s[i]==空格
continue;//左边i自加一,右边j-i不动
else if(s[j-i]==' ')//若右边遇到空格,则j--即可
j--;
else//若两头都不是空格即可直接判断false
break;
}
}
if(i==l/2)//判断上面循环是否正常退出
cout<<"YES"<<endl;
else
cout<<"NO"<<endl;
}
return 0;
}