描述:
给你一个整型(int)数N,可以将其看成字符串,是否有可能在N前加入若干个0(也可以不加),使得该字符串为回文串。
输入:
数字N
0 ≤ N ≤ 109
输出:
若可以则输出Yes,不可以则输出No,输出结束要换行。
样例输入:
1210
样例输出:
Yes
一、题目分析
题目要求判断字符串是否能构成回文,P.S:虽然题目规定N为整形变量,但在oj后台测试时会把它作为字符串,即会出现00111000这样的输入。
思路:先统计字符串头部和尾部的0
当头部"0"的个数大于尾部''0''的个数时,不可能构成回文
其他情况则擦去头部和尾部的''0'',此时的字符串就相当于一个普通的字符串,进行回文判断即可
#include<iostream>
#include<string>
using namespace std;
int main()
{
string str;
cin >> str;
int count = str.size();
int pre_zero = 0; int post_zero = 0;//字符串头部和尾部"0"的数量
int flag = 1;//初始化回文标志为正
while (str[pre_zero] == '0') pre_zero++;
while (str[count - 1 - post_zero] == '0') post_zero++;
//得到去掉"0"之后头部和尾部字符串的对于位置
int pre = pre_zero;
int post = count - 1 - post_zero;
count -= pre_zero + post_zero;//去掉0之后字符串实际的长度
if (pre_zero > post_zero) flag = 0;
//回文判断
while (pre<count/2)
{
if (str[pre] != str[post])
{
flag = 0;
break;
}
else
{
pre++;
post--;
}
}
if (flag) cout << "Yes" << endl;
else cout << "No" << endl;
return 0;
}