算法设计与分析 E : 构造回文串

描述:

给你一个整型(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;
}

  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值