蘑菇街笔试题5

题目描述:

给定一个字符串,问是否能够通过添加一个字母,使其变为回文。

输入描述:
一行由小写字母构成的字符串,字符串长度小于等于10
输出描述:
YES/NO
例子:
coco
输出:
YES

分析:从微信公众号上看到的别人用Java的解题思路,即如果添加一个字符能变为回文串,那么删除对应位置上的字符,该字符串仍为回文。用一个循环,每次删掉一个字符,然后判断是否为回文,如果遍历完字符串,判断结果都为回文,输出YES,否则,输出NO。
代码如下:
bool isPalindrome(string s)
{
    string temp = s;
    reverse(s.begin(),s.end());
    return (temp == s );
}
int main()
{
    string input;
    while(cin >> input)
    {
        if(input.size() == 0 || input.size() == 1)
            cout << "YES" <<endl;
        else
        {
            string s;
            int n = input.size();
            bool flag = false;
            for(int i = 0;i < n;i++)
            {
                s = input.substr(0,i) + input.substr(i+1);
                if(isPalindrome(s))
                {
                     flag = true;
                     break;
                }

            }
            if(flag)
                cout << "YES" << endl;
            else
                cout << "NO" << endl;
        }
    }

顺带提一下,研究这个题目也吧string类的substr学习了一下。
substr有两种用法。
第一种 sub(i,j);表示取字符串从第i个字符起到第j个字符为止的子串
第二种 substr(i);只有一个参数,表示取字符串从第i个为止开始到字符串结尾的子串
//示例:
 string s = "01234567";
 string str1,str2;
 str1 = s.substr(2);
 str2 = s.substr(3,5);
// 则str1为“234567”
 //str2为“345”




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值