问题 A: 逆序列

【题目描述】

编写一个程序,判断字符串是否为形如“子序列1&子序列2”模式的字符串,其中子序列2是子序列1的逆序列,子序列字符串长度最长不超过1000,且都为小写字母。是则输出YES,否则输出NO。

【输入格式】

数据有多组,每组占一行,包含一个字符串s

【输出 格式】

对于每组输入数据,输出一行YES或NO

【输入样例】

hello&ollhe

【输出样例】

NO

【思路及特别提示】

这题解放较常规。
tip1:首先应该在字符串中找到’&'的位置,然后把字符串以此位置切成两个,首先判断两个子串大小有没有超过最大长度限制1000,其次判断右子串翻转后的结果是不是与左子串一致,如果满足上面两个条件,再判断子串中是不是全是小写字符,如果是,则给rs变量赋值位YES,否则不对其进行其他操作,使用rs的默认值NO。

【代码】

#include<iostream>
#include<algorithm>
using namespace std;
//10min 13:39-13:49 问题A
int main(){
    int i;
    string str;
    while(cin>>str){
        int len=str.size();
        int pos=str.find('&');
        string rs="NO";
        string pre=str.substr(0,pos);
        string post=str.substr(pos+1);
        reverse(post.begin(),post.end());
        if(pre.size()<=1000&&post.size()<=1000){
            if(pre==post){
                for(i=0;i<pre.size();i++){
                    if(pre[i]<'a'||pre[i]>'z')
                        break;
                }
                if(i>=pre.size())
                    rs="YES";
            }
        }
        cout<<rs<<endl;
    }
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值