目录

对称字符串处理

【题目描述】

某某国王(不是萨拉克门托!)有一个神奇的魔镜,它可以把东西变为原来的两倍(可惜是反的)。某日,他感到很无聊,于是把皇后的一串珠子变了不知道几次,皇后回来之后不是很高兴,她还是喜欢原来那串珠子,现在告诉你改变之后珠子的形状,请你告诉她,原来的珠子是什么样子的。

【输入】

输入有多组测试用例,每组一行,每行一串字符,表示现在的珠串,长度小于100。

【输出】

输出对应有多行,每行输出原来的珠串。

For example:

Input

Result

1232232112322321
121121
abba

1232
121
ab

Answer:(penalty regime: 20 %)

#include <iostream>
#include <cstring>
#include <string>
using namespace std;

bool myfun(string &s)
{
    int beg = 0;
    int end = s.size()-1;
    while(beg < end)
    {
        if(s[beg] != s[end])
        {
            return false;
        }
        beg++;
        end--;
    }
    return true;
}

int main()
{
    string s;
    while(cin >> s)
    {


        while(myfun(s) && s.size()%2==0)
            s = s.substr(0,s.size()/2);
        cout << s << endl;
    }
    return 0;
}

搞了老久了妈的

没想到,c++的string字符串中的单个字符也可以通过s[]的形式来访问,发现了新大陆,感觉还是蛮方便的;

这题的算法很巧妙,当然不是我想出来的,参考https://blog.csdn.net/jacketinsysu/article/details/38335453

t=s.substr(a,b)是将s中的从a开始的b个元素复制到t中;